// Code generated by smithy-go-codegen DO NOT EDIT.

package types

import (
	smithydocument "github.com/aws/smithy-go/document"
	"time"
)

// The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon Web
// Services Inferentia chips) on an instance.
type AcceleratorCount struct {

	// The maximum number of accelerators. If this parameter is not specified, there
	// is no maximum limit.
	Max *int32

	// The minimum number of accelerators. If this parameter is not specified, there
	// is no minimum limit.
	Min *int32

	noSmithyDocumentSerde
}

// The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon Web
// Services Inferentia chips) on an instance. To exclude accelerator-enabled
// instance types, set Max to 0 .
type AcceleratorCountRequest struct {

	// The maximum number of accelerators. To specify no maximum limit, omit this
	// parameter. To exclude accelerator-enabled instance types, set Max to 0 .
	Max *int32

	// The minimum number of accelerators. To specify no minimum limit, omit this
	// parameter.
	Min *int32

	noSmithyDocumentSerde
}

// The minimum and maximum amount of total accelerator memory, in MiB.
type AcceleratorTotalMemoryMiB struct {

	// The maximum amount of accelerator memory, in MiB. If this parameter is not
	// specified, there is no maximum limit.
	Max *int32

	// The minimum amount of accelerator memory, in MiB. If this parameter is not
	// specified, there is no minimum limit.
	Min *int32

	noSmithyDocumentSerde
}

// The minimum and maximum amount of total accelerator memory, in MiB.
type AcceleratorTotalMemoryMiBRequest struct {

	// The maximum amount of accelerator memory, in MiB. To specify no maximum limit,
	// omit this parameter.
	Max *int32

	// The minimum amount of accelerator memory, in MiB. To specify no minimum limit,
	// omit this parameter.
	Min *int32

	noSmithyDocumentSerde
}

// Describes a finding for a Network Access Scope.
type AccessScopeAnalysisFinding struct {

	// The finding components.
	FindingComponents []PathComponent

	// The ID of the finding.
	FindingId *string

	// The ID of the Network Access Scope analysis.
	NetworkInsightsAccessScopeAnalysisId *string

	// The ID of the Network Access Scope.
	NetworkInsightsAccessScopeId *string

	noSmithyDocumentSerde
}

// Describes a path.
type AccessScopePath struct {

	// The destination.
	Destination *PathStatement

	// The source.
	Source *PathStatement

	// The through resources.
	ThroughResources []ThroughResourcesStatement

	noSmithyDocumentSerde
}

// Describes a path.
type AccessScopePathRequest struct {

	// The destination.
	Destination *PathStatementRequest

	// The source.
	Source *PathStatementRequest

	// The through resources.
	ThroughResources []ThroughResourcesStatementRequest

	noSmithyDocumentSerde
}

// Describes an account attribute.
type AccountAttribute struct {

	// The name of the account attribute.
	AttributeName *string

	// The values for the account attribute.
	AttributeValues []AccountAttributeValue

	noSmithyDocumentSerde
}

// Describes a value of an account attribute.
type AccountAttributeValue struct {

	// The value of the attribute.
	AttributeValue *string

	noSmithyDocumentSerde
}

// Describes a running instance in a Spot Fleet.
type ActiveInstance struct {

	// The health status of the instance. If the status of either the instance status
	// check or the system status check is impaired , the health status of the instance
	// is unhealthy . Otherwise, the health status is healthy .
	InstanceHealth InstanceHealthStatus

	// The ID of the instance.
	InstanceId *string

	// The instance type.
	InstanceType *string

	// The ID of the Spot Instance request.
	SpotInstanceRequestId *string

	noSmithyDocumentSerde
}

// Describes a principal.
type AddedPrincipal struct {

	// The Amazon Resource Name (ARN) of the principal.
	Principal *string

	// The type of principal.
	PrincipalType PrincipalType

	// The ID of the service.
	ServiceId *string

	// The ID of the service permission.
	ServicePermissionId *string

	noSmithyDocumentSerde
}

// Add an operating Region to an IPAM. Operating Regions are Amazon Web Services
// Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only
// discovers and monitors resources in the Amazon Web Services Regions you select
// as operating Regions. For more information about operating Regions, see Create
// an IPAM (https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html) in the
// Amazon VPC IPAM User Guide.
type AddIpamOperatingRegion struct {

	// The name of the operating Region.
	RegionName *string

	noSmithyDocumentSerde
}

// Describes an additional detail for a path analysis. For more information, see
// Reachability Analyzer additional detail codes (https://docs.aws.amazon.com/vpc/latest/reachability/additional-detail-codes.html)
// .
type AdditionalDetail struct {

	// The additional detail code.
	AdditionalDetailType *string

	// The path component.
	Component *AnalysisComponent

	// The load balancers.
	LoadBalancers []AnalysisComponent

	// The rule options.
	RuleGroupRuleOptionsPairs []RuleGroupRuleOptionsPair

	// The rule group type.
	RuleGroupTypePairs []RuleGroupTypePair

	// The rule options.
	RuleOptions []RuleOption

	// The name of the VPC endpoint service.
	ServiceName *string

	// The VPC endpoint service.
	VpcEndpointService *AnalysisComponent

	noSmithyDocumentSerde
}

// An entry for a prefix list.
type AddPrefixListEntry struct {

	// The CIDR block.
	//
	// This member is required.
	Cidr *string

	// A description for the entry. Constraints: Up to 255 characters in length.
	Description *string

	noSmithyDocumentSerde
}

// Describes an Elastic IP address, or a carrier IP address.
type Address struct {

	// The ID representing the allocation of the address.
	AllocationId *string

	// The ID representing the association of the address with an instance.
	AssociationId *string

	// The carrier IP address associated. This option is only available for network
	// interfaces which reside in a subnet in a Wavelength Zone (for example an EC2
	// instance).
	CarrierIp *string

	// The customer-owned IP address.
	CustomerOwnedIp *string

	// The ID of the customer-owned address pool.
	CustomerOwnedIpv4Pool *string

	// The network ( vpc ).
	Domain DomainType

	// The ID of the instance that the address is associated with (if any).
	InstanceId *string

	// The name of the unique set of Availability Zones, Local Zones, or Wavelength
	// Zones from which Amazon Web Services advertises IP addresses.
	NetworkBorderGroup *string

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The ID of the Amazon Web Services account that owns the network interface.
	NetworkInterfaceOwnerId *string

	// The private IP address associated with the Elastic IP address.
	PrivateIpAddress *string

	// The Elastic IP address.
	PublicIp *string

	// The ID of an address pool.
	PublicIpv4Pool *string

	// Any tags assigned to the Elastic IP address.
	Tags []Tag

	noSmithyDocumentSerde
}

// The attributes associated with an Elastic IP address.
type AddressAttribute struct {

	// [EC2-VPC] The allocation ID.
	AllocationId *string

	// The pointer (PTR) record for the IP address.
	PtrRecord *string

	// The updated PTR record for the IP address.
	PtrRecordUpdate *PtrUpdateStatus

	// The public IP address.
	PublicIp *string

	noSmithyDocumentSerde
}

// Details on the Elastic IP address transfer. For more information, see Transfer
// Elastic IP addresses (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#transfer-EIPs-intro)
// in the Amazon Virtual Private Cloud User Guide.
type AddressTransfer struct {

	// The Elastic IP address transfer status.
	AddressTransferStatus AddressTransferStatus

	// The allocation ID of an Elastic IP address.
	AllocationId *string

	// The Elastic IP address being transferred.
	PublicIp *string

	// The ID of the account that you want to transfer the Elastic IP address to.
	TransferAccountId *string

	// The timestamp when the Elastic IP address transfer was accepted.
	TransferOfferAcceptedTimestamp *time.Time

	// The timestamp when the Elastic IP address transfer expired. When the source
	// account starts the transfer, the transfer account has seven hours to allocate
	// the Elastic IP address to complete the transfer, or the Elastic IP address will
	// return to its original owner.
	TransferOfferExpirationTimestamp *time.Time

	noSmithyDocumentSerde
}

// Describes a principal.
type AllowedPrincipal struct {

	// The Amazon Resource Name (ARN) of the principal.
	Principal *string

	// The type of principal.
	PrincipalType PrincipalType

	// The ID of the service.
	ServiceId *string

	// The ID of the service permission.
	ServicePermissionId *string

	// The tags.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes an potential intermediate component of a feasible path.
type AlternatePathHint struct {

	// The Amazon Resource Name (ARN) of the component.
	ComponentArn *string

	// The ID of the component.
	ComponentId *string

	noSmithyDocumentSerde
}

// Describes a network access control (ACL) rule.
type AnalysisAclRule struct {

	// The IPv4 address range, in CIDR notation.
	Cidr *string

	// Indicates whether the rule is an outbound rule.
	Egress *bool

	// The range of ports.
	PortRange *PortRange

	// The protocol.
	Protocol *string

	// Indicates whether to allow or deny traffic that matches the rule.
	RuleAction *string

	// The rule number.
	RuleNumber *int32

	noSmithyDocumentSerde
}

// Describes a path component.
type AnalysisComponent struct {

	// The Amazon Resource Name (ARN) of the component.
	Arn *string

	// The ID of the component.
	Id *string

	// The name of the analysis component.
	Name *string

	noSmithyDocumentSerde
}

// Describes a load balancer listener.
type AnalysisLoadBalancerListener struct {

	// [Classic Load Balancers] The back-end port for the listener.
	InstancePort *int32

	// The port on which the load balancer is listening.
	LoadBalancerPort *int32

	noSmithyDocumentSerde
}

// Describes a load balancer target.
type AnalysisLoadBalancerTarget struct {

	// The IP address.
	Address *string

	// The Availability Zone.
	AvailabilityZone *string

	// Information about the instance.
	Instance *AnalysisComponent

	// The port on which the target is listening.
	Port *int32

	noSmithyDocumentSerde
}

// Describes a header. Reflects any changes made by a component as traffic passes
// through. The fields of an inbound header are null except for the first component
// of a path.
type AnalysisPacketHeader struct {

	// The destination addresses.
	DestinationAddresses []string

	// The destination port ranges.
	DestinationPortRanges []PortRange

	// The protocol.
	Protocol *string

	// The source addresses.
	SourceAddresses []string

	// The source port ranges.
	SourcePortRanges []PortRange

	noSmithyDocumentSerde
}

// Describes a route table route.
type AnalysisRouteTableRoute struct {

	// The ID of a carrier gateway.
	CarrierGatewayId *string

	// The Amazon Resource Name (ARN) of a core network.
	CoreNetworkArn *string

	// The destination IPv4 address, in CIDR notation.
	DestinationCidr *string

	// The prefix of the Amazon Web Service.
	DestinationPrefixListId *string

	// The ID of an egress-only internet gateway.
	EgressOnlyInternetGatewayId *string

	// The ID of the gateway, such as an internet gateway or virtual private gateway.
	GatewayId *string

	// The ID of the instance, such as a NAT instance.
	InstanceId *string

	// The ID of a local gateway.
	LocalGatewayId *string

	// The ID of a NAT gateway.
	NatGatewayId *string

	// The ID of a network interface.
	NetworkInterfaceId *string

	// Describes how the route was created. The following are the possible values:
	//   - CreateRouteTable - The route was automatically created when the route table
	//   was created.
	//   - CreateRoute - The route was manually added to the route table.
	//   - EnableVgwRoutePropagation - The route was propagated by route propagation.
	Origin *string

	// The state. The following are the possible values:
	//   - active
	//   - blackhole
	State *string

	// The ID of a transit gateway.
	TransitGatewayId *string

	// The ID of a VPC peering connection.
	VpcPeeringConnectionId *string

	noSmithyDocumentSerde
}

// Describes a security group rule.
type AnalysisSecurityGroupRule struct {

	// The IPv4 address range, in CIDR notation.
	Cidr *string

	// The direction. The following are the possible values:
	//   - egress
	//   - ingress
	Direction *string

	// The port range.
	PortRange *PortRange

	// The prefix list ID.
	PrefixListId *string

	// The protocol name.
	Protocol *string

	// The security group ID.
	SecurityGroupId *string

	noSmithyDocumentSerde
}

// An Autonomous System Number (ASN) and BYOIP CIDR association.
type AsnAssociation struct {

	// The association's ASN.
	Asn *string

	// The association's CIDR.
	Cidr *string

	// The association's state.
	State AsnAssociationState

	// The association's status message.
	StatusMessage *string

	noSmithyDocumentSerde
}

// Provides authorization for Amazon to bring an Autonomous System Number (ASN) to
// a specific Amazon Web Services account using bring your own ASN (BYOASN). For
// details on the format of the message and signature, see Tutorial: Bring your
// ASN to IPAM (https://docs.aws.amazon.com/vpc/latest/ipam/tutorials-byoasn.html)
// in the Amazon VPC IPAM guide.
type AsnAuthorizationContext struct {

	// The authorization context's message.
	//
	// This member is required.
	Message *string

	// The authorization context's signature.
	//
	// This member is required.
	Signature *string

	noSmithyDocumentSerde
}

// Describes the private IP addresses assigned to a network interface.
type AssignedPrivateIpAddress struct {

	// The private IP address assigned to the network interface.
	PrivateIpAddress *string

	noSmithyDocumentSerde
}

// Information about the associated IAM roles.
type AssociatedRole struct {

	// The ARN of the associated IAM role.
	AssociatedRoleArn *string

	// The name of the Amazon S3 bucket in which the Amazon S3 object is stored.
	CertificateS3BucketName *string

	// The key of the Amazon S3 object ey where the certificate, certificate chain,
	// and encrypted private key bundle is stored. The object key is formated as
	// follows: role_arn / certificate_arn .
	CertificateS3ObjectKey *string

	// The ID of the KMS customer master key (CMK) used to encrypt the private key.
	EncryptionKmsKeyId *string

	noSmithyDocumentSerde
}

// Describes a target network that is associated with a Client VPN endpoint. A
// target network is a subnet in a VPC.
type AssociatedTargetNetwork struct {

	// The ID of the subnet.
	NetworkId *string

	// The target network type.
	NetworkType AssociatedNetworkType

	noSmithyDocumentSerde
}

// Describes the state of a target network association.
type AssociationStatus struct {

	// The state of the target network association.
	Code AssociationStatusCode

	// A message about the status of the target network association, if applicable.
	Message *string

	noSmithyDocumentSerde
}

// Describes integration options for Amazon Athena.
type AthenaIntegration struct {

	// The location in Amazon S3 to store the generated CloudFormation template.
	//
	// This member is required.
	IntegrationResultS3DestinationArn *string

	// The schedule for adding new partitions to the table.
	//
	// This member is required.
	PartitionLoadFrequency PartitionLoadFrequency

	// The end date for the partition.
	PartitionEndDate *time.Time

	// The start date for the partition.
	PartitionStartDate *time.Time

	noSmithyDocumentSerde
}

// ENA Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
// technology to increase the maximum bandwidth used per stream and minimize tail
// latency of network traffic between EC2 instances. With ENA Express, you can
// communicate between two EC2 instances in the same subnet within the same
// account, or in different accounts. Both sending and receiving instances must
// have ENA Express enabled. To improve the reliability of network packet delivery,
// ENA Express reorders network packets on the receiving end by default. However,
// some UDP-based applications are designed to handle network packets that are out
// of order to reduce the overhead for packet delivery at the network layer. When
// ENA Express is enabled, you can specify whether UDP network traffic uses it.
type AttachmentEnaSrdSpecification struct {

	// Indicates whether ENA Express is enabled for the network interface.
	EnaSrdEnabled *bool

	// Configures ENA Express for UDP network traffic.
	EnaSrdUdpSpecification *AttachmentEnaSrdUdpSpecification

	noSmithyDocumentSerde
}

// ENA Express is compatible with both TCP and UDP transport protocols. When it's
// enabled, TCP traffic automatically uses it. However, some UDP-based applications
// are designed to handle network packets that are out of order, without a need for
// retransmission, such as live video broadcasting or other near-real-time
// applications. For UDP traffic, you can specify whether to use ENA Express, based
// on your application environment needs.
type AttachmentEnaSrdUdpSpecification struct {

	// Indicates whether UDP traffic to and from the instance uses ENA Express. To
	// specify this setting, you must first enable ENA Express.
	EnaSrdUdpEnabled *bool

	noSmithyDocumentSerde
}

// Describes a value for a resource attribute that is a Boolean value.
type AttributeBooleanValue struct {

	// The attribute value. The valid values are true or false .
	Value *bool

	noSmithyDocumentSerde
}

// Describes a value for a resource attribute that is a String.
type AttributeValue struct {

	// The attribute value. The value is case-sensitive.
	Value *string

	noSmithyDocumentSerde
}

// Information about an authorization rule.
type AuthorizationRule struct {

	// Indicates whether the authorization rule grants access to all clients.
	AccessAll *bool

	// The ID of the Client VPN endpoint with which the authorization rule is
	// associated.
	ClientVpnEndpointId *string

	// A brief description of the authorization rule.
	Description *string

	// The IPv4 address range, in CIDR notation, of the network to which the
	// authorization rule applies.
	DestinationCidr *string

	// The ID of the Active Directory group to which the authorization rule grants
	// access.
	GroupId *string

	// The current state of the authorization rule.
	Status *ClientVpnAuthorizationRuleStatus

	noSmithyDocumentSerde
}

// Describes Availability Zones, Local Zones, and Wavelength Zones.
type AvailabilityZone struct {

	// For Availability Zones, this parameter has the same value as the Region name.
	// For Local Zones, the name of the associated group, for example us-west-2-lax-1 .
	// For Wavelength Zones, the name of the associated group, for example
	// us-east-1-wl1-bos-wlz-1 .
	GroupName *string

	// Any messages about the Availability Zone, Local Zone, or Wavelength Zone.
	Messages []AvailabilityZoneMessage

	// The name of the network border group.
	NetworkBorderGroup *string

	// For Availability Zones, this parameter always has the value of
	// opt-in-not-required . For Local Zones and Wavelength Zones, this parameter is
	// the opt-in status. The possible values are opted-in , and not-opted-in .
	OptInStatus AvailabilityZoneOptInStatus

	// The ID of the zone that handles some of the Local Zone or Wavelength Zone
	// control plane operations, such as API calls.
	ParentZoneId *string

	// The name of the zone that handles some of the Local Zone or Wavelength Zone
	// control plane operations, such as API calls.
	ParentZoneName *string

	// The name of the Region.
	RegionName *string

	// The state of the Availability Zone, Local Zone, or Wavelength Zone. This value
	// is always available .
	State AvailabilityZoneState

	// The ID of the Availability Zone, Local Zone, or Wavelength Zone.
	ZoneId *string

	// The name of the Availability Zone, Local Zone, or Wavelength Zone.
	ZoneName *string

	// The type of zone. The valid values are availability-zone , local-zone , and
	// wavelength-zone .
	ZoneType *string

	noSmithyDocumentSerde
}

// Describes a message about an Availability Zone, Local Zone, or Wavelength Zone.
type AvailabilityZoneMessage struct {

	// The message about the Availability Zone, Local Zone, or Wavelength Zone.
	Message *string

	noSmithyDocumentSerde
}

// The capacity information for instances that can be launched onto the Dedicated
// Host.
type AvailableCapacity struct {

	// The number of instances that can be launched onto the Dedicated Host depending
	// on the host's available capacity. For Dedicated Hosts that support multiple
	// instance types, this parameter represents the number of instances for each
	// instance size that is supported on the host.
	AvailableInstanceCapacity []InstanceCapacity

	// The number of vCPUs available for launching instances onto the Dedicated Host.
	AvailableVCpus *int32

	noSmithyDocumentSerde
}

// The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For more
// information, see Amazon EBS–optimized instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html)
// in the Amazon EC2 User Guide.
type BaselineEbsBandwidthMbps struct {

	// The maximum baseline bandwidth, in Mbps. If this parameter is not specified,
	// there is no maximum limit.
	Max *int32

	// The minimum baseline bandwidth, in Mbps. If this parameter is not specified,
	// there is no minimum limit.
	Min *int32

	noSmithyDocumentSerde
}

// The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For more
// information, see Amazon EBS–optimized instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html)
// in the Amazon EC2 User Guide.
type BaselineEbsBandwidthMbpsRequest struct {

	// The maximum baseline bandwidth, in Mbps. To specify no maximum limit, omit this
	// parameter.
	Max *int32

	// The minimum baseline bandwidth, in Mbps. To specify no minimum limit, omit this
	// parameter.
	Min *int32

	noSmithyDocumentSerde
}

type BlobAttributeValue struct {
	Value []byte

	noSmithyDocumentSerde
}

// Describes a block device mapping, which defines the EBS volumes and instance
// store volumes to attach to an instance at launch.
type BlockDeviceMapping struct {

	// The device name (for example, /dev/sdh or xvdh ).
	DeviceName *string

	// Parameters used to automatically set up EBS volumes when the instance is
	// launched.
	Ebs *EbsBlockDevice

	// To omit the device from the block device mapping, specify an empty string. When
	// this property is specified, the device is removed from the block device mapping
	// regardless of the assigned value.
	NoDevice *string

	// The virtual device name ( ephemeral N). Instance store volumes are numbered
	// starting from 0. An instance type with 2 available instance store volumes can
	// specify mappings for ephemeral0 and ephemeral1 . The number of available
	// instance store volumes depends on the instance type. After you connect to the
	// instance, you must mount the volume. NVMe instance store volumes are
	// automatically enumerated and assigned a device name. Including them in your
	// block device mapping has no effect. Constraints: For M3 instances, you must
	// specify instance store volumes in the block device mapping for the instance.
	// When you launch an M3 instance, we ignore any instance store volumes specified
	// in the block device mapping for the AMI.
	VirtualName *string

	noSmithyDocumentSerde
}

// Describes a bundle task.
type BundleTask struct {

	// The ID of the bundle task.
	BundleId *string

	// If the task fails, a description of the error.
	BundleTaskError *BundleTaskError

	// The ID of the instance associated with this bundle task.
	InstanceId *string

	// The level of task completion, as a percent (for example, 20%).
	Progress *string

	// The time this task started.
	StartTime *time.Time

	// The state of the task.
	State BundleTaskState

	// The Amazon S3 storage locations.
	Storage *Storage

	// The time of the most recent update for the task.
	UpdateTime *time.Time

	noSmithyDocumentSerde
}

// Describes an error for BundleInstance .
type BundleTaskError struct {

	// The error code.
	Code *string

	// The error message.
	Message *string

	noSmithyDocumentSerde
}

// The Autonomous System Number (ASN) and BYOIP CIDR association.
type Byoasn struct {

	// A public 2-byte or 4-byte ASN.
	Asn *string

	// An IPAM ID.
	IpamId *string

	// The provisioning state of the BYOASN.
	State AsnState

	// The status message.
	StatusMessage *string

	noSmithyDocumentSerde
}

// Information about an address range that is provisioned for use with your Amazon
// Web Services resources through bring your own IP addresses (BYOIP).
type ByoipCidr struct {

	// The BYOIP CIDR associations with ASNs.
	AsnAssociations []AsnAssociation

	// The address range, in CIDR notation.
	Cidr *string

	// The description of the address range.
	Description *string

	// If you have Local Zones (https://docs.aws.amazon.com/local-zones/latest/ug/how-local-zones-work.html)
	// enabled, you can choose a network border group for Local Zones when you
	// provision and advertise a BYOIPv4 CIDR. Choose the network border group
	// carefully as the EIP and the Amazon Web Services resource it is associated with
	// must reside in the same network border group. You can provision BYOIP address
	// ranges to and advertise them in the following Local Zone network border groups:
	//   - us-east-1-dfw-2
	//   - us-west-2-lax-1
	//   - us-west-2-phx-2
	// You cannot provision or advertise BYOIPv6 address ranges in Local Zones at this
	// time.
	NetworkBorderGroup *string

	// The state of the address pool.
	State ByoipCidrState

	// Upon success, contains the ID of the address pool. Otherwise, contains an error
	// message.
	StatusMessage *string

	noSmithyDocumentSerde
}

// Describes a Capacity Reservation Fleet cancellation error.
type CancelCapacityReservationFleetError struct {

	// The error code.
	Code *string

	// The error message.
	Message *string

	noSmithyDocumentSerde
}

// Describes a request to cancel a Spot Instance.
type CancelledSpotInstanceRequest struct {

	// The ID of the Spot Instance request.
	SpotInstanceRequestId *string

	// The state of the Spot Instance request.
	State CancelSpotInstanceRequestState

	noSmithyDocumentSerde
}

// Describes a Spot Fleet error.
type CancelSpotFleetRequestsError struct {

	// The error code.
	Code CancelBatchErrorCode

	// The description for the error code.
	Message *string

	noSmithyDocumentSerde
}

// Describes a Spot Fleet request that was not successfully canceled.
type CancelSpotFleetRequestsErrorItem struct {

	// The error.
	Error *CancelSpotFleetRequestsError

	// The ID of the Spot Fleet request.
	SpotFleetRequestId *string

	noSmithyDocumentSerde
}

// Describes a Spot Fleet request that was successfully canceled.
type CancelSpotFleetRequestsSuccessItem struct {

	// The current state of the Spot Fleet request.
	CurrentSpotFleetRequestState BatchState

	// The previous state of the Spot Fleet request.
	PreviousSpotFleetRequestState BatchState

	// The ID of the Spot Fleet request.
	SpotFleetRequestId *string

	noSmithyDocumentSerde
}

// Information about instance capacity usage for a Capacity Reservation.
type CapacityAllocation struct {

	// The usage type. used indicates that the instance capacity is in use by
	// instances that are running in the Capacity Reservation.
	AllocationType AllocationType

	// The amount of instance capacity associated with the usage. For example a value
	// of 4 indicates that instance capacity for 4 instances is currently in use.
	Count *int32

	noSmithyDocumentSerde
}

// The recommended Capacity Block that fits your search requirements.
type CapacityBlockOffering struct {

	// The Availability Zone of the Capacity Block offering.
	AvailabilityZone *string

	// The amount of time of the Capacity Block reservation in hours.
	CapacityBlockDurationHours *int32

	// The ID of the Capacity Block offering.
	CapacityBlockOfferingId *string

	// The currency of the payment for the Capacity Block.
	CurrencyCode *string

	// The end date of the Capacity Block offering.
	EndDate *time.Time

	// The number of instances in the Capacity Block offering.
	InstanceCount *int32

	// The instance type of the Capacity Block offering.
	InstanceType *string

	// The start date of the Capacity Block offering.
	StartDate *time.Time

	// The tenancy of the Capacity Block.
	Tenancy CapacityReservationTenancy

	// The total price to be paid up front.
	UpfrontFee *string

	noSmithyDocumentSerde
}

// Describes a Capacity Reservation.
type CapacityReservation struct {

	// The Availability Zone in which the capacity is reserved.
	AvailabilityZone *string

	// The Availability Zone ID of the Capacity Reservation.
	AvailabilityZoneId *string

	// The remaining capacity. Indicates the number of instances that can be launched
	// in the Capacity Reservation.
	AvailableInstanceCount *int32

	// Information about instance capacity usage.
	CapacityAllocations []CapacityAllocation

	// The Amazon Resource Name (ARN) of the Capacity Reservation.
	CapacityReservationArn *string

	// The ID of the Capacity Reservation Fleet to which the Capacity Reservation
	// belongs. Only valid for Capacity Reservations that were created by a Capacity
	// Reservation Fleet.
	CapacityReservationFleetId *string

	// The ID of the Capacity Reservation.
	CapacityReservationId *string

	// The date and time at which the Capacity Reservation was created.
	CreateDate *time.Time

	// Indicates whether the Capacity Reservation supports EBS-optimized instances.
	// This optimization provides dedicated throughput to Amazon EBS and an optimized
	// configuration stack to provide optimal I/O performance. This optimization isn't
	// available with all instance types. Additional usage charges apply when using an
	// EBS- optimized instance.
	EbsOptimized *bool

	// The date and time at which the Capacity Reservation expires. When a Capacity
	// Reservation expires, the reserved capacity is released and you can no longer
	// launch instances into it. The Capacity Reservation's state changes to expired
	// when it reaches its end date and time.
	EndDate *time.Time

	// Indicates the way in which the Capacity Reservation ends. A Capacity
	// Reservation can have one of the following end types:
	//   - unlimited - The Capacity Reservation remains active until you explicitly
	//   cancel it.
	//   - limited - The Capacity Reservation expires automatically at a specified date
	//   and time.
	EndDateType EndDateType

	// Deprecated.
	EphemeralStorage *bool

	// Indicates the type of instance launches that the Capacity Reservation accepts.
	// The options include:
	//   - open - The Capacity Reservation accepts all instances that have matching
	//   attributes (instance type, platform, and Availability Zone). Instances that have
	//   matching attributes launch into the Capacity Reservation automatically without
	//   specifying any additional parameters.
	//   - targeted - The Capacity Reservation only accepts instances that have
	//   matching attributes (instance type, platform, and Availability Zone), and
	//   explicitly target the Capacity Reservation. This ensures that only permitted
	//   instances can use the reserved capacity.
	InstanceMatchCriteria InstanceMatchCriteria

	// The type of operating system for which the Capacity Reservation reserves
	// capacity.
	InstancePlatform CapacityReservationInstancePlatform

	// The type of instance for which the Capacity Reservation reserves capacity.
	InstanceType *string

	// The Amazon Resource Name (ARN) of the Outpost on which the Capacity Reservation
	// was created.
	OutpostArn *string

	// The ID of the Amazon Web Services account that owns the Capacity Reservation.
	OwnerId *string

	// The Amazon Resource Name (ARN) of the cluster placement group in which the
	// Capacity Reservation was created. For more information, see Capacity
	// Reservations for cluster placement groups (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html)
	// in the Amazon EC2 User Guide.
	PlacementGroupArn *string

	// The type of Capacity Reservation.
	ReservationType CapacityReservationType

	// The date and time at which the Capacity Reservation was started.
	StartDate *time.Time

	// The current state of the Capacity Reservation. A Capacity Reservation can be in
	// one of the following states:
	//   - active - The Capacity Reservation is active and the capacity is available
	//   for your use.
	//   - expired - The Capacity Reservation expired automatically at the date and
	//   time specified in your request. The reserved capacity is no longer available for
	//   your use.
	//   - cancelled - The Capacity Reservation was cancelled. The reserved capacity is
	//   no longer available for your use.
	//   - pending - The Capacity Reservation request was successful but the capacity
	//   provisioning is still pending.
	//   - failed - The Capacity Reservation request has failed. A request might fail
	//   due to invalid request parameters, capacity constraints, or instance limit
	//   constraints. Failed requests are retained for 60 minutes.
	State CapacityReservationState

	// Any tags assigned to the Capacity Reservation.
	Tags []Tag

	// Indicates the tenancy of the Capacity Reservation. A Capacity Reservation can
	// have one of the following tenancy settings:
	//   - default - The Capacity Reservation is created on hardware that is shared
	//   with other Amazon Web Services accounts.
	//   - dedicated - The Capacity Reservation is created on single-tenant hardware
	//   that is dedicated to a single Amazon Web Services account.
	Tenancy CapacityReservationTenancy

	// The total number of instances for which the Capacity Reservation reserves
	// capacity.
	TotalInstanceCount *int32

	noSmithyDocumentSerde
}

// Information about a Capacity Reservation Fleet.
type CapacityReservationFleet struct {

	// The strategy used by the Capacity Reservation Fleet to determine which of the
	// specified instance types to use. For more information, see For more information,
	// see Allocation strategy (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#allocation-strategy)
	// in the Amazon EC2 User Guide.
	AllocationStrategy *string

	// The ARN of the Capacity Reservation Fleet.
	CapacityReservationFleetArn *string

	// The ID of the Capacity Reservation Fleet.
	CapacityReservationFleetId *string

	// The date and time at which the Capacity Reservation Fleet was created.
	CreateTime *time.Time

	// The date and time at which the Capacity Reservation Fleet expires.
	EndDate *time.Time

	// Indicates the type of instance launches that the Capacity Reservation Fleet
	// accepts. All Capacity Reservations in the Fleet inherit this instance matching
	// criteria. Currently, Capacity Reservation Fleets support open instance matching
	// criteria only. This means that instances that have matching attributes (instance
	// type, platform, and Availability Zone) run in the Capacity Reservations
	// automatically. Instances do not need to explicitly target a Capacity Reservation
	// Fleet to use its reserved capacity.
	InstanceMatchCriteria FleetInstanceMatchCriteria

	// Information about the instance types for which to reserve the capacity.
	InstanceTypeSpecifications []FleetCapacityReservation

	// The state of the Capacity Reservation Fleet. Possible states include:
	//   - submitted - The Capacity Reservation Fleet request has been submitted and
	//   Amazon Elastic Compute Cloud is preparing to create the Capacity Reservations.
	//   - modifying - The Capacity Reservation Fleet is being modified. The Fleet
	//   remains in this state until the modification is complete.
	//   - active - The Capacity Reservation Fleet has fulfilled its total target
	//   capacity and it is attempting to maintain this capacity. The Fleet remains in
	//   this state until it is modified or deleted.
	//   - partially_fulfilled - The Capacity Reservation Fleet has partially fulfilled
	//   its total target capacity. There is insufficient Amazon EC2 to fulfill the total
	//   target capacity. The Fleet is attempting to asynchronously fulfill its total
	//   target capacity.
	//   - expiring - The Capacity Reservation Fleet has reach its end date and it is
	//   in the process of expiring. One or more of its Capacity reservations might still
	//   be active.
	//   - expired - The Capacity Reservation Fleet has reach its end date. The Fleet
	//   and its Capacity Reservations are expired. The Fleet can't create new Capacity
	//   Reservations.
	//   - cancelling - The Capacity Reservation Fleet is in the process of being
	//   cancelled. One or more of its Capacity reservations might still be active.
	//   - cancelled - The Capacity Reservation Fleet has been manually cancelled. The
	//   Fleet and its Capacity Reservations are cancelled and the Fleet can't create new
	//   Capacity Reservations.
	//   - failed - The Capacity Reservation Fleet failed to reserve capacity for the
	//   specified instance types.
	State CapacityReservationFleetState

	// The tags assigned to the Capacity Reservation Fleet.
	Tags []Tag

	// The tenancy of the Capacity Reservation Fleet. Tenancies include:
	//   - default - The Capacity Reservation Fleet is created on hardware that is
	//   shared with other Amazon Web Services accounts.
	//   - dedicated - The Capacity Reservation Fleet is created on single-tenant
	//   hardware that is dedicated to a single Amazon Web Services account.
	Tenancy FleetCapacityReservationTenancy

	// The capacity units that have been fulfilled.
	TotalFulfilledCapacity *float64

	// The total number of capacity units for which the Capacity Reservation Fleet
	// reserves capacity. For more information, see Total target capacity (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity)
	// in the Amazon EC2 User Guide.
	TotalTargetCapacity *int32

	noSmithyDocumentSerde
}

// Describes a Capacity Reservation Fleet that was successfully cancelled.
type CapacityReservationFleetCancellationState struct {

	// The ID of the Capacity Reservation Fleet that was successfully cancelled.
	CapacityReservationFleetId *string

	// The current state of the Capacity Reservation Fleet.
	CurrentFleetState CapacityReservationFleetState

	// The previous state of the Capacity Reservation Fleet.
	PreviousFleetState CapacityReservationFleetState

	noSmithyDocumentSerde
}

// Describes a resource group to which a Capacity Reservation has been added.
type CapacityReservationGroup struct {

	// The ARN of the resource group.
	GroupArn *string

	// The ID of the Amazon Web Services account that owns the resource group.
	OwnerId *string

	noSmithyDocumentSerde
}

// Describes the strategy for using unused Capacity Reservations for fulfilling
// On-Demand capacity. This strategy can only be used if the EC2 Fleet is of type
// instant . For more information about Capacity Reservations, see On-Demand
// Capacity Reservations (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)
// in the Amazon EC2 User Guide. For examples of using Capacity Reservations in an
// EC2 Fleet, see EC2 Fleet example configurations (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-examples.html)
// in the Amazon EC2 User Guide.
type CapacityReservationOptions struct {

	// Indicates whether to use unused Capacity Reservations for fulfilling On-Demand
	// capacity. If you specify use-capacity-reservations-first , the fleet uses unused
	// Capacity Reservations to fulfill On-Demand capacity up to the target On-Demand
	// capacity. If multiple instance pools have unused Capacity Reservations, the
	// On-Demand allocation strategy ( lowest-price or prioritized ) is applied. If the
	// number of unused Capacity Reservations is less than the On-Demand target
	// capacity, the remaining On-Demand target capacity is launched according to the
	// On-Demand allocation strategy ( lowest-price or prioritized ). If you do not
	// specify a value, the fleet fulfils the On-Demand capacity according to the
	// chosen On-Demand allocation strategy.
	UsageStrategy FleetCapacityReservationUsageStrategy

	noSmithyDocumentSerde
}

// Describes the strategy for using unused Capacity Reservations for fulfilling
// On-Demand capacity. This strategy can only be used if the EC2 Fleet is of type
// instant . For more information about Capacity Reservations, see On-Demand
// Capacity Reservations (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)
// in the Amazon EC2 User Guide. For examples of using Capacity Reservations in an
// EC2 Fleet, see EC2 Fleet example configurations (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-examples.html)
// in the Amazon EC2 User Guide.
type CapacityReservationOptionsRequest struct {

	// Indicates whether to use unused Capacity Reservations for fulfilling On-Demand
	// capacity. If you specify use-capacity-reservations-first , the fleet uses unused
	// Capacity Reservations to fulfill On-Demand capacity up to the target On-Demand
	// capacity. If multiple instance pools have unused Capacity Reservations, the
	// On-Demand allocation strategy ( lowest-price or prioritized ) is applied. If the
	// number of unused Capacity Reservations is less than the On-Demand target
	// capacity, the remaining On-Demand target capacity is launched according to the
	// On-Demand allocation strategy ( lowest-price or prioritized ). If you do not
	// specify a value, the fleet fulfils the On-Demand capacity according to the
	// chosen On-Demand allocation strategy.
	UsageStrategy FleetCapacityReservationUsageStrategy

	noSmithyDocumentSerde
}

// Describes an instance's Capacity Reservation targeting option. You can specify
// only one parameter at a time. If you specify CapacityReservationPreference and
// CapacityReservationTarget , the request fails. Use the
// CapacityReservationPreference parameter to configure the instance to run as an
// On-Demand Instance or to run in any open Capacity Reservation that has matching
// attributes (instance type, platform, Availability Zone). Use the
// CapacityReservationTarget parameter to explicitly target a specific Capacity
// Reservation or a Capacity Reservation group.
type CapacityReservationSpecification struct {

	// Indicates the instance's Capacity Reservation preferences. Possible preferences
	// include:
	//   - open - The instance can run in any open Capacity Reservation that has
	//   matching attributes (instance type, platform, Availability Zone).
	//   - none - The instance avoids running in a Capacity Reservation even if one is
	//   available. The instance runs as an On-Demand Instance.
	CapacityReservationPreference CapacityReservationPreference

	// Information about the target Capacity Reservation or Capacity Reservation group.
	CapacityReservationTarget *CapacityReservationTarget

	noSmithyDocumentSerde
}

// Describes the instance's Capacity Reservation targeting preferences. The action
// returns the capacityReservationPreference response element if the instance is
// configured to run in On-Demand capacity, or if it is configured in run in any
// open Capacity Reservation that has matching attributes (instance type, platform,
// Availability Zone). The action returns the capacityReservationTarget response
// element if the instance explicily targets a specific Capacity Reservation or
// Capacity Reservation group.
type CapacityReservationSpecificationResponse struct {

	// Describes the instance's Capacity Reservation preferences. Possible preferences
	// include:
	//   - open - The instance can run in any open Capacity Reservation that has
	//   matching attributes (instance type, platform, Availability Zone).
	//   - none - The instance avoids running in a Capacity Reservation even if one is
	//   available. The instance runs in On-Demand capacity.
	CapacityReservationPreference CapacityReservationPreference

	// Information about the targeted Capacity Reservation or Capacity Reservation
	// group.
	CapacityReservationTarget *CapacityReservationTargetResponse

	noSmithyDocumentSerde
}

// Describes a target Capacity Reservation or Capacity Reservation group.
type CapacityReservationTarget struct {

	// The ID of the Capacity Reservation in which to run the instance.
	CapacityReservationId *string

	// The ARN of the Capacity Reservation resource group in which to run the instance.
	CapacityReservationResourceGroupArn *string

	noSmithyDocumentSerde
}

// Describes a target Capacity Reservation or Capacity Reservation group.
type CapacityReservationTargetResponse struct {

	// The ID of the targeted Capacity Reservation.
	CapacityReservationId *string

	// The ARN of the targeted Capacity Reservation group.
	CapacityReservationResourceGroupArn *string

	noSmithyDocumentSerde
}

// Describes a carrier gateway.
type CarrierGateway struct {

	// The ID of the carrier gateway.
	CarrierGatewayId *string

	// The Amazon Web Services account ID of the owner of the carrier gateway.
	OwnerId *string

	// The state of the carrier gateway.
	State CarrierGatewayState

	// The tags assigned to the carrier gateway.
	Tags []Tag

	// The ID of the VPC associated with the carrier gateway.
	VpcId *string

	noSmithyDocumentSerde
}

// Information about the client certificate used for authentication.
type CertificateAuthentication struct {

	// The ARN of the client certificate.
	ClientRootCertificateChain *string

	noSmithyDocumentSerde
}

// Information about the client certificate to be used for authentication.
type CertificateAuthenticationRequest struct {

	// The ARN of the client certificate. The certificate must be signed by a
	// certificate authority (CA) and it must be provisioned in Certificate Manager
	// (ACM).
	ClientRootCertificateChainArn *string

	noSmithyDocumentSerde
}

// Provides authorization for Amazon to bring a specific IP address range to a
// specific Amazon Web Services account using bring your own IP addresses (BYOIP).
// For more information, see Configuring your BYOIP address range (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html#prepare-for-byoip)
// in the Amazon Elastic Compute Cloud User Guide.
type CidrAuthorizationContext struct {

	// The plain-text authorization message for the prefix and account.
	//
	// This member is required.
	Message *string

	// The signed authorization message for the prefix and account.
	//
	// This member is required.
	Signature *string

	noSmithyDocumentSerde
}

// Describes an IPv4 CIDR block.
type CidrBlock struct {

	// The IPv4 CIDR block.
	CidrBlock *string

	noSmithyDocumentSerde
}

// Deprecated. Describes the ClassicLink DNS support status of a VPC.
type ClassicLinkDnsSupport struct {

	// Indicates whether ClassicLink DNS support is enabled for the VPC.
	ClassicLinkDnsSupported *bool

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Deprecated. Describes a linked EC2-Classic instance.
type ClassicLinkInstance struct {

	// The security groups.
	Groups []GroupIdentifier

	// The ID of the instance.
	InstanceId *string

	// Any tags assigned to the instance.
	Tags []Tag

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes a Classic Load Balancer.
type ClassicLoadBalancer struct {

	// The name of the load balancer.
	Name *string

	noSmithyDocumentSerde
}

// Describes the Classic Load Balancers to attach to a Spot Fleet. Spot Fleet
// registers the running Spot Instances with these Classic Load Balancers.
type ClassicLoadBalancersConfig struct {

	// One or more Classic Load Balancers.
	ClassicLoadBalancers []ClassicLoadBalancer

	noSmithyDocumentSerde
}

// Describes the state of a client certificate revocation list.
type ClientCertificateRevocationListStatus struct {

	// The state of the client certificate revocation list.
	Code ClientCertificateRevocationListStatusCode

	// A message about the status of the client certificate revocation list, if
	// applicable.
	Message *string

	noSmithyDocumentSerde
}

// The options for managing connection authorization for new client connections.
type ClientConnectOptions struct {

	// Indicates whether client connect options are enabled. The default is false (not
	// enabled).
	Enabled *bool

	// The Amazon Resource Name (ARN) of the Lambda function used for connection
	// authorization.
	LambdaFunctionArn *string

	noSmithyDocumentSerde
}

// The options for managing connection authorization for new client connections.
type ClientConnectResponseOptions struct {

	// Indicates whether client connect options are enabled.
	Enabled *bool

	// The Amazon Resource Name (ARN) of the Lambda function used for connection
	// authorization.
	LambdaFunctionArn *string

	// The status of any updates to the client connect options.
	Status *ClientVpnEndpointAttributeStatus

	noSmithyDocumentSerde
}

// Describes the client-specific data.
type ClientData struct {

	// A user-defined comment about the disk upload.
	Comment *string

	// The time that the disk upload ends.
	UploadEnd *time.Time

	// The size of the uploaded disk image, in GiB.
	UploadSize *float64

	// The time that the disk upload starts.
	UploadStart *time.Time

	noSmithyDocumentSerde
}

// Options for enabling a customizable text banner that will be displayed on
// Amazon Web Services provided clients when a VPN session is established.
type ClientLoginBannerOptions struct {

	// Customizable text that will be displayed in a banner on Amazon Web Services
	// provided clients when a VPN session is established. UTF-8 encoded characters
	// only. Maximum of 1400 characters.
	BannerText *string

	// Enable or disable a customizable text banner that will be displayed on Amazon
	// Web Services provided clients when a VPN session is established. Valid values:
	// true | false Default value: false
	Enabled *bool

	noSmithyDocumentSerde
}

// Current state of options for customizable text banner that will be displayed on
// Amazon Web Services provided clients when a VPN session is established.
type ClientLoginBannerResponseOptions struct {

	// Customizable text that will be displayed in a banner on Amazon Web Services
	// provided clients when a VPN session is established. UTF-8 encoded characters
	// only. Maximum of 1400 characters.
	BannerText *string

	// Current state of text banner feature. Valid values: true | false
	Enabled *bool

	noSmithyDocumentSerde
}

// Describes the authentication methods used by a Client VPN endpoint. For more
// information, see Authentication (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/client-authentication.html)
// in the Client VPN Administrator Guide.
type ClientVpnAuthentication struct {

	// Information about the Active Directory, if applicable.
	ActiveDirectory *DirectoryServiceAuthentication

	// Information about the IAM SAML identity provider, if applicable.
	FederatedAuthentication *FederatedAuthentication

	// Information about the authentication certificates, if applicable.
	MutualAuthentication *CertificateAuthentication

	// The authentication type used.
	Type ClientVpnAuthenticationType

	noSmithyDocumentSerde
}

// Describes the authentication method to be used by a Client VPN endpoint. For
// more information, see Authentication (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/authentication-authrization.html#client-authentication)
// in the Client VPN Administrator Guide.
type ClientVpnAuthenticationRequest struct {

	// Information about the Active Directory to be used, if applicable. You must
	// provide this information if Type is directory-service-authentication .
	ActiveDirectory *DirectoryServiceAuthenticationRequest

	// Information about the IAM SAML identity provider to be used, if applicable. You
	// must provide this information if Type is federated-authentication .
	FederatedAuthentication *FederatedAuthenticationRequest

	// Information about the authentication certificates to be used, if applicable.
	// You must provide this information if Type is certificate-authentication .
	MutualAuthentication *CertificateAuthenticationRequest

	// The type of client authentication to be used.
	Type ClientVpnAuthenticationType

	noSmithyDocumentSerde
}

// Describes the state of an authorization rule.
type ClientVpnAuthorizationRuleStatus struct {

	// The state of the authorization rule.
	Code ClientVpnAuthorizationRuleStatusCode

	// A message about the status of the authorization rule, if applicable.
	Message *string

	noSmithyDocumentSerde
}

// Describes a client connection.
type ClientVpnConnection struct {

	// The IP address of the client.
	ClientIp *string

	// The ID of the Client VPN endpoint to which the client is connected.
	ClientVpnEndpointId *string

	// The common name associated with the client. This is either the name of the
	// client certificate, or the Active Directory user name.
	CommonName *string

	// The date and time the client connection was terminated.
	ConnectionEndTime *string

	// The date and time the client connection was established.
	ConnectionEstablishedTime *string

	// The ID of the client connection.
	ConnectionId *string

	// The number of bytes received by the client.
	EgressBytes *string

	// The number of packets received by the client.
	EgressPackets *string

	// The number of bytes sent by the client.
	IngressBytes *string

	// The number of packets sent by the client.
	IngressPackets *string

	// The statuses returned by the client connect handler for posture compliance, if
	// applicable.
	PostureComplianceStatuses []string

	// The current state of the client connection.
	Status *ClientVpnConnectionStatus

	// The current date and time.
	Timestamp *string

	// The username of the client who established the client connection. This
	// information is only provided if Active Directory client authentication is used.
	Username *string

	noSmithyDocumentSerde
}

// Describes the status of a client connection.
type ClientVpnConnectionStatus struct {

	// The state of the client connection.
	Code ClientVpnConnectionStatusCode

	// A message about the status of the client connection, if applicable.
	Message *string

	noSmithyDocumentSerde
}

// Describes a Client VPN endpoint.
type ClientVpnEndpoint struct {

	// Information about the associated target networks. A target network is a subnet
	// in a VPC.
	//
	// Deprecated: This property is deprecated. To view the target networks associated
	// with a Client VPN endpoint, call DescribeClientVpnTargetNetworks and inspect the
	// clientVpnTargetNetworks response element.
	AssociatedTargetNetworks []AssociatedTargetNetwork

	// Information about the authentication method used by the Client VPN endpoint.
	AuthenticationOptions []ClientVpnAuthentication

	// The IPv4 address range, in CIDR notation, from which client IP addresses are
	// assigned.
	ClientCidrBlock *string

	// The options for managing connection authorization for new client connections.
	ClientConnectOptions *ClientConnectResponseOptions

	// Options for enabling a customizable text banner that will be displayed on
	// Amazon Web Services provided clients when a VPN session is established.
	ClientLoginBannerOptions *ClientLoginBannerResponseOptions

	// The ID of the Client VPN endpoint.
	ClientVpnEndpointId *string

	// Information about the client connection logging options for the Client VPN
	// endpoint.
	ConnectionLogOptions *ConnectionLogResponseOptions

	// The date and time the Client VPN endpoint was created.
	CreationTime *string

	// The date and time the Client VPN endpoint was deleted, if applicable.
	DeletionTime *string

	// A brief description of the endpoint.
	Description *string

	// The DNS name to be used by clients when connecting to the Client VPN endpoint.
	DnsName *string

	// Information about the DNS servers to be used for DNS resolution.
	DnsServers []string

	// The IDs of the security groups for the target network.
	SecurityGroupIds []string

	// The URL of the self-service portal.
	SelfServicePortalUrl *string

	// The ARN of the server certificate.
	ServerCertificateArn *string

	// The maximum VPN session duration time in hours. Valid values: 8 | 10 | 12 | 24
	// Default value: 24
	SessionTimeoutHours *int32

	// Indicates whether split-tunnel is enabled in the Client VPN endpoint. For
	// information about split-tunnel VPN endpoints, see Split-Tunnel Client VPN
	// endpoint (https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/split-tunnel-vpn.html)
	// in the Client VPN Administrator Guide.
	SplitTunnel *bool

	// The current state of the Client VPN endpoint.
	Status *ClientVpnEndpointStatus

	// Any tags assigned to the Client VPN endpoint.
	Tags []Tag

	// The transport protocol used by the Client VPN endpoint.
	TransportProtocol TransportProtocol

	// The ID of the VPC.
	VpcId *string

	// The port number for the Client VPN endpoint.
	VpnPort *int32

	// The protocol used by the VPN session.
	VpnProtocol VpnProtocol

	noSmithyDocumentSerde
}

// Describes the status of the Client VPN endpoint attribute.
type ClientVpnEndpointAttributeStatus struct {

	// The status code.
	Code ClientVpnEndpointAttributeStatusCode

	// The status message.
	Message *string

	noSmithyDocumentSerde
}

// Describes the state of a Client VPN endpoint.
type ClientVpnEndpointStatus struct {

	// The state of the Client VPN endpoint. Possible states include:
	//   - pending-associate - The Client VPN endpoint has been created but no target
	//   networks have been associated. The Client VPN endpoint cannot accept
	//   connections.
	//   - available - The Client VPN endpoint has been created and a target network
	//   has been associated. The Client VPN endpoint can accept connections.
	//   - deleting - The Client VPN endpoint is being deleted. The Client VPN endpoint
	//   cannot accept connections.
	//   - deleted - The Client VPN endpoint has been deleted. The Client VPN endpoint
	//   cannot accept connections.
	Code ClientVpnEndpointStatusCode

	// A message about the status of the Client VPN endpoint.
	Message *string

	noSmithyDocumentSerde
}

// Information about a Client VPN endpoint route.
type ClientVpnRoute struct {

	// The ID of the Client VPN endpoint with which the route is associated.
	ClientVpnEndpointId *string

	// A brief description of the route.
	Description *string

	// The IPv4 address range, in CIDR notation, of the route destination.
	DestinationCidr *string

	// Indicates how the route was associated with the Client VPN endpoint. associate
	// indicates that the route was automatically added when the target network was
	// associated with the Client VPN endpoint. add-route indicates that the route was
	// manually added using the CreateClientVpnRoute action.
	Origin *string

	// The current state of the route.
	Status *ClientVpnRouteStatus

	// The ID of the subnet through which traffic is routed.
	TargetSubnet *string

	// The route type.
	Type *string

	noSmithyDocumentSerde
}

// Describes the state of a Client VPN endpoint route.
type ClientVpnRouteStatus struct {

	// The state of the Client VPN endpoint route.
	Code ClientVpnRouteStatusCode

	// A message about the status of the Client VPN endpoint route, if applicable.
	Message *string

	noSmithyDocumentSerde
}

// Options for sending VPN tunnel logs to CloudWatch.
type CloudWatchLogOptions struct {

	// Status of VPN tunnel logging feature. Default value is False . Valid values:
	// True | False
	LogEnabled *bool

	// The Amazon Resource Name (ARN) of the CloudWatch log group to send logs to.
	LogGroupArn *string

	// Configured log format. Default format is json . Valid values: json | text
	LogOutputFormat *string

	noSmithyDocumentSerde
}

// Options for sending VPN tunnel logs to CloudWatch.
type CloudWatchLogOptionsSpecification struct {

	// Enable or disable VPN tunnel logging feature. Default value is False . Valid
	// values: True | False
	LogEnabled *bool

	// The Amazon Resource Name (ARN) of the CloudWatch log group to send logs to.
	LogGroupArn *string

	// Set log format. Default format is json . Valid values: json | text
	LogOutputFormat *string

	noSmithyDocumentSerde
}

// Describes address usage for a customer-owned address pool.
type CoipAddressUsage struct {

	// The allocation ID of the address.
	AllocationId *string

	// The Amazon Web Services account ID.
	AwsAccountId *string

	// The Amazon Web Services service.
	AwsService *string

	// The customer-owned IP address.
	CoIp *string

	noSmithyDocumentSerde
}

// Information about a customer-owned IP address range.
type CoipCidr struct {

	// An address range in a customer-owned IP address space.
	Cidr *string

	// The ID of the address pool.
	CoipPoolId *string

	// The ID of the local gateway route table.
	LocalGatewayRouteTableId *string

	noSmithyDocumentSerde
}

// Describes a customer-owned address pool.
type CoipPool struct {

	// The ID of the local gateway route table.
	LocalGatewayRouteTableId *string

	// The ARN of the address pool.
	PoolArn *string

	// The address ranges of the address pool.
	PoolCidrs []string

	// The ID of the address pool.
	PoolId *string

	// The tags.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes the client connection logging options for the Client VPN endpoint.
type ConnectionLogOptions struct {

	// The name of the CloudWatch Logs log group. Required if connection logging is
	// enabled.
	CloudwatchLogGroup *string

	// The name of the CloudWatch Logs log stream to which the connection data is
	// published.
	CloudwatchLogStream *string

	// Indicates whether connection logging is enabled.
	Enabled *bool

	noSmithyDocumentSerde
}

// Information about the client connection logging options for a Client VPN
// endpoint.
type ConnectionLogResponseOptions struct {

	// The name of the Amazon CloudWatch Logs log group to which connection logging
	// data is published.
	CloudwatchLogGroup *string

	// The name of the Amazon CloudWatch Logs log stream to which connection logging
	// data is published.
	CloudwatchLogStream *string

	// Indicates whether client connection logging is enabled for the Client VPN
	// endpoint.
	Enabled *bool

	noSmithyDocumentSerde
}

// Describes a connection notification for a VPC endpoint or VPC endpoint service.
type ConnectionNotification struct {

	// The events for the notification. Valid values are Accept , Connect , Delete ,
	// and Reject .
	ConnectionEvents []string

	// The ARN of the SNS topic for the notification.
	ConnectionNotificationArn *string

	// The ID of the notification.
	ConnectionNotificationId *string

	// The state of the notification.
	ConnectionNotificationState ConnectionNotificationState

	// The type of notification.
	ConnectionNotificationType ConnectionNotificationType

	// The ID of the endpoint service.
	ServiceId *string

	// The ID of the VPC endpoint.
	VpcEndpointId *string

	noSmithyDocumentSerde
}

// A security group connection tracking configuration that enables you to set the
// idle timeout for connection tracking on an Elastic network interface. For more
// information, see Connection tracking timeouts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts)
// in the Amazon Elastic Compute Cloud User Guide.
type ConnectionTrackingConfiguration struct {

	// Timeout (in seconds) for idle TCP connections in an established state. Min: 60
	// seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended:
	// Less than 432000 seconds.
	TcpEstablishedTimeout *int32

	// Timeout (in seconds) for idle UDP flows classified as streams which have seen
	// more than one request-response transaction. Min: 60 seconds. Max: 180 seconds (3
	// minutes). Default: 180 seconds.
	UdpStreamTimeout *int32

	// Timeout (in seconds) for idle UDP flows that have seen traffic only in a single
	// direction or a single request-response transaction. Min: 30 seconds. Max: 60
	// seconds. Default: 30 seconds.
	UdpTimeout *int32

	noSmithyDocumentSerde
}

// A security group connection tracking specification that enables you to set the
// idle timeout for connection tracking on an Elastic network interface. For more
// information, see Connection tracking timeouts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts)
// in the Amazon Elastic Compute Cloud User Guide.
type ConnectionTrackingSpecification struct {

	// Timeout (in seconds) for idle TCP connections in an established state. Min: 60
	// seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended:
	// Less than 432000 seconds.
	TcpEstablishedTimeout *int32

	// Timeout (in seconds) for idle UDP flows classified as streams which have seen
	// more than one request-response transaction. Min: 60 seconds. Max: 180 seconds (3
	// minutes). Default: 180 seconds.
	UdpStreamTimeout *int32

	// Timeout (in seconds) for idle UDP flows that have seen traffic only in a single
	// direction or a single request-response transaction. Min: 30 seconds. Max: 60
	// seconds. Default: 30 seconds.
	UdpTimeout *int32

	noSmithyDocumentSerde
}

// A security group connection tracking specification request that enables you to
// set the idle timeout for connection tracking on an Elastic network interface.
// For more information, see Connection tracking timeouts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts)
// in the Amazon Elastic Compute Cloud User Guide.
type ConnectionTrackingSpecificationRequest struct {

	// Timeout (in seconds) for idle TCP connections in an established state. Min: 60
	// seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended:
	// Less than 432000 seconds.
	TcpEstablishedTimeout *int32

	// Timeout (in seconds) for idle UDP flows classified as streams which have seen
	// more than one request-response transaction. Min: 60 seconds. Max: 180 seconds (3
	// minutes). Default: 180 seconds.
	UdpStreamTimeout *int32

	// Timeout (in seconds) for idle UDP flows that have seen traffic only in a single
	// direction or a single request-response transaction. Min: 30 seconds. Max: 60
	// seconds. Default: 30 seconds.
	UdpTimeout *int32

	noSmithyDocumentSerde
}

// A security group connection tracking specification response that enables you to
// set the idle timeout for connection tracking on an Elastic network interface.
// For more information, see Connection tracking timeouts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts)
// in the Amazon Elastic Compute Cloud User Guide.
type ConnectionTrackingSpecificationResponse struct {

	// Timeout (in seconds) for idle TCP connections in an established state. Min: 60
	// seconds. Max: 432000 seconds (5 days). Default: 432000 seconds. Recommended:
	// Less than 432000 seconds.
	TcpEstablishedTimeout *int32

	// Timeout (in seconds) for idle UDP flows classified as streams which have seen
	// more than one request-response transaction. Min: 60 seconds. Max: 180 seconds (3
	// minutes). Default: 180 seconds.
	UdpStreamTimeout *int32

	// Timeout (in seconds) for idle UDP flows that have seen traffic only in a single
	// direction or a single request-response transaction. Min: 30 seconds. Max: 60
	// seconds. Default: 30 seconds.
	UdpTimeout *int32

	noSmithyDocumentSerde
}

// Describes a conversion task.
type ConversionTask struct {

	// The ID of the conversion task.
	ConversionTaskId *string

	// The time when the task expires. If the upload isn't complete before the
	// expiration time, we automatically cancel the task.
	ExpirationTime *string

	// If the task is for importing an instance, this contains information about the
	// import instance task.
	ImportInstance *ImportInstanceTaskDetails

	// If the task is for importing a volume, this contains information about the
	// import volume task.
	ImportVolume *ImportVolumeTaskDetails

	// The state of the conversion task.
	State ConversionTaskState

	// The status message related to the conversion task.
	StatusMessage *string

	// Any tags assigned to the task.
	Tags []Tag

	noSmithyDocumentSerde
}

// The CPU options for the instance.
type CpuOptions struct {

	// Indicates whether the instance is enabled for AMD SEV-SNP. For more
	// information, see AMD SEV-SNP (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html)
	// .
	AmdSevSnp AmdSevSnpSpecification

	// The number of CPU cores for the instance.
	CoreCount *int32

	// The number of threads per CPU core.
	ThreadsPerCore *int32

	noSmithyDocumentSerde
}

// The CPU options for the instance. Both the core count and threads per core must
// be specified in the request.
type CpuOptionsRequest struct {

	// Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is
	// supported with M6a, R6a, and C6a instance types only. For more information, see
	// AMD SEV-SNP (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html) .
	AmdSevSnp AmdSevSnpSpecification

	// The number of CPU cores for the instance.
	CoreCount *int32

	// The number of threads per CPU core. To disable multithreading for the instance,
	// specify a value of 1 . Otherwise, specify the default value of 2 .
	ThreadsPerCore *int32

	noSmithyDocumentSerde
}

// Describes the instances that could not be launched by the fleet.
type CreateFleetError struct {

	// The error code that indicates why the instance could not be launched. For more
	// information about error codes, see Error codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html)
	// .
	ErrorCode *string

	// The error message that describes why the instance could not be launched. For
	// more information about error messages, see Error codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html)
	// .
	ErrorMessage *string

	// The launch templates and overrides that were used for launching the instances.
	// The values that you specify in the Overrides replace the values in the launch
	// template.
	LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse

	// Indicates if the instance that could not be launched was a Spot Instance or
	// On-Demand Instance.
	Lifecycle InstanceLifecycle

	noSmithyDocumentSerde
}

// Describes the instances that were launched by the fleet.
type CreateFleetInstance struct {

	// The IDs of the instances.
	InstanceIds []string

	// The instance type.
	InstanceType InstanceType

	// The launch templates and overrides that were used for launching the instances.
	// The values that you specify in the Overrides replace the values in the launch
	// template.
	LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse

	// Indicates if the instance that was launched is a Spot Instance or On-Demand
	// Instance.
	Lifecycle InstanceLifecycle

	// The value is Windows for Windows instances. Otherwise, the value is blank.
	Platform PlatformValues

	noSmithyDocumentSerde
}

// The options for a Connect attachment.
type CreateTransitGatewayConnectRequestOptions struct {

	// The tunnel protocol.
	//
	// This member is required.
	Protocol ProtocolValue

	noSmithyDocumentSerde
}

// The options for the transit gateway multicast domain.
type CreateTransitGatewayMulticastDomainRequestOptions struct {

	// Indicates whether to automatically accept cross-account subnet associations
	// that are associated with the transit gateway multicast domain.
	AutoAcceptSharedAssociations AutoAcceptSharedAssociationsValue

	// Specify whether to enable Internet Group Management Protocol (IGMP) version 2
	// for the transit gateway multicast domain.
	Igmpv2Support Igmpv2SupportValue

	// Specify whether to enable support for statically configuring multicast group
	// sources for a domain.
	StaticSourcesSupport StaticSourcesSupportValue

	noSmithyDocumentSerde
}

// Describes whether dynamic routing is enabled or disabled for the transit
// gateway peering request.
type CreateTransitGatewayPeeringAttachmentRequestOptions struct {

	// Indicates whether dynamic routing is enabled or disabled.
	DynamicRouting DynamicRoutingValue

	noSmithyDocumentSerde
}

// Describes the options for a VPC attachment.
type CreateTransitGatewayVpcAttachmentRequestOptions struct {

	// Enable or disable support for appliance mode. If enabled, a traffic flow
	// between a source and destination uses the same Availability Zone for the VPC
	// attachment for the lifetime of that flow. The default is disable .
	ApplianceModeSupport ApplianceModeSupportValue

	// Enable or disable DNS support. The default is enable .
	DnsSupport DnsSupportValue

	// Enable or disable IPv6 support. The default is disable .
	Ipv6Support Ipv6SupportValue

	// Enables you to reference a security group across VPCs attached to a transit
	// gateway (TGW). Use this option to simplify security group management and control
	// of instance-to-instance traffic across VPCs that are connected by transit
	// gateway. You can also use this option to migrate from VPC peering (which was the
	// only option that supported security group referencing) to transit gateways
	// (which now also support security group referencing). This option is disabled by
	// default and there are no additional costs to use this feature. If you don't
	// enable or disable SecurityGroupReferencingSupport in the request, the attachment
	// will inherit the security group referencing support setting on the transit
	// gateway. For important information about this feature, see Create a transit
	// gateway attachment to a VPC (https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#create-vpc-attachment)
	// in the Amazon Web Services Transit Gateway Guide.
	SecurityGroupReferencingSupport SecurityGroupReferencingSupportValue

	noSmithyDocumentSerde
}

// Describes the network interface options when creating an Amazon Web Services
// Verified Access endpoint using the network-interface type.
type CreateVerifiedAccessEndpointEniOptions struct {

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The IP port number.
	Port *int32

	// The IP protocol.
	Protocol VerifiedAccessEndpointProtocol

	noSmithyDocumentSerde
}

// Describes the load balancer options when creating an Amazon Web Services
// Verified Access endpoint using the load-balancer type.
type CreateVerifiedAccessEndpointLoadBalancerOptions struct {

	// The ARN of the load balancer.
	LoadBalancerArn *string

	// The IP port number.
	Port *int32

	// The IP protocol.
	Protocol VerifiedAccessEndpointProtocol

	// The IDs of the subnets.
	SubnetIds []string

	noSmithyDocumentSerde
}

// Describes the options when creating an Amazon Web Services Verified Access
// trust provider using the device type.
type CreateVerifiedAccessTrustProviderDeviceOptions struct {

	// The URL Amazon Web Services Verified Access will use to verify the authenticity
	// of the device tokens.
	PublicSigningKeyUrl *string

	// The ID of the tenant application with the device-identity provider.
	TenantId *string

	noSmithyDocumentSerde
}

// Describes the options when creating an Amazon Web Services Verified Access
// trust provider using the user type.
type CreateVerifiedAccessTrustProviderOidcOptions struct {

	// The OIDC authorization endpoint.
	AuthorizationEndpoint *string

	// The client identifier.
	ClientId *string

	// The client secret.
	ClientSecret *string

	// The OIDC issuer.
	Issuer *string

	// OpenID Connect (OIDC) scopes are used by an application during authentication
	// to authorize access to a user's details. Each scope returns a specific set of
	// user attributes.
	Scope *string

	// The OIDC token endpoint.
	TokenEndpoint *string

	// The OIDC user info endpoint.
	UserInfoEndpoint *string

	noSmithyDocumentSerde
}

// Describes the user or group to be added or removed from the list of create
// volume permissions for a volume.
type CreateVolumePermission struct {

	// The group to be added or removed. The possible value is all .
	Group PermissionGroup

	// The ID of the Amazon Web Services account to be added or removed.
	UserId *string

	noSmithyDocumentSerde
}

// Describes modifications to the list of create volume permissions for a volume.
type CreateVolumePermissionModifications struct {

	// Adds the specified Amazon Web Services account ID or group to the list.
	Add []CreateVolumePermission

	// Removes the specified Amazon Web Services account ID or group from the list.
	Remove []CreateVolumePermission

	noSmithyDocumentSerde
}

// Describes the credit option for CPU usage of a T instance.
type CreditSpecification struct {

	// The credit option for CPU usage of a T instance. Valid values: standard |
	// unlimited
	CpuCredits *string

	noSmithyDocumentSerde
}

// The credit option for CPU usage of a T instance.
type CreditSpecificationRequest struct {

	// The credit option for CPU usage of a T instance. Valid values: standard |
	// unlimited
	//
	// This member is required.
	CpuCredits *string

	noSmithyDocumentSerde
}

// Describes a customer gateway.
type CustomerGateway struct {

	// The customer gateway's Border Gateway Protocol (BGP) Autonomous System Number
	// (ASN).
	BgpAsn *string

	// The Amazon Resource Name (ARN) for the customer gateway certificate.
	CertificateArn *string

	// The ID of the customer gateway.
	CustomerGatewayId *string

	// The name of customer gateway device.
	DeviceName *string

	// The IP address of the customer gateway device's outside interface.
	IpAddress *string

	// The current state of the customer gateway ( pending | available | deleting |
	// deleted ).
	State *string

	// Any tags assigned to the customer gateway.
	Tags []Tag

	// The type of VPN connection the customer gateway supports ( ipsec.1 ).
	Type *string

	noSmithyDocumentSerde
}

// A query used for retrieving network health data.
type DataQuery struct {

	// The Region or Availability Zone that's the target for the data query. For
	// example, eu-north-1 .
	Destination *string

	// A user-defined ID associated with a data query that's returned in the
	// dataResponse identifying the query. For example, if you set the Id to MyQuery01
	// in the query, the dataResponse identifies the query as MyQuery01 .
	Id *string

	// The metric, aggregation-latency , indicating that network latency is aggregated
	// for the query. This is the only supported metric.
	Metric MetricType

	// The aggregation period used for the data query.
	Period PeriodType

	// The Region or Availability Zone that's the source for the data query. For
	// example, us-east-1 .
	Source *string

	// The metric data aggregation period, p50 , between the specified startDate and
	// endDate . For example, a metric of five_minutes is the median of all the data
	// points gathered within those five minutes. p50 is the only supported metric.
	Statistic StatisticType

	noSmithyDocumentSerde
}

// The response to a DataQuery .
type DataResponse struct {

	// The Region or Availability Zone that's the destination for the data query. For
	// example, eu-west-1 .
	Destination *string

	// The ID passed in the DataQuery .
	Id *string

	// The metric used for the network performance request. Only aggregate-latency is
	// supported, which shows network latency during a specified period.
	Metric MetricType

	// A list of MetricPoint objects.
	MetricPoints []MetricPoint

	// The period used for the network performance request.
	Period PeriodType

	// The Region or Availability Zone that's the source for the data query. For
	// example, us-east-1 .
	Source *string

	// The statistic used for the network performance request.
	Statistic StatisticType

	noSmithyDocumentSerde
}

// Describes an EC2 Fleet error.
type DeleteFleetError struct {

	// The error code.
	Code DeleteFleetErrorCode

	// The description for the error code.
	Message *string

	noSmithyDocumentSerde
}

// Describes an EC2 Fleet that was not successfully deleted.
type DeleteFleetErrorItem struct {

	// The error.
	Error *DeleteFleetError

	// The ID of the EC2 Fleet.
	FleetId *string

	noSmithyDocumentSerde
}

// Describes an EC2 Fleet that was successfully deleted.
type DeleteFleetSuccessItem struct {

	// The current state of the EC2 Fleet.
	CurrentFleetState FleetStateCode

	// The ID of the EC2 Fleet.
	FleetId *string

	// The previous state of the EC2 Fleet.
	PreviousFleetState FleetStateCode

	noSmithyDocumentSerde
}

// Describes a launch template version that could not be deleted.
type DeleteLaunchTemplateVersionsResponseErrorItem struct {

	// The ID of the launch template.
	LaunchTemplateId *string

	// The name of the launch template.
	LaunchTemplateName *string

	// Information about the error.
	ResponseError *ResponseError

	// The version number of the launch template.
	VersionNumber *int64

	noSmithyDocumentSerde
}

// Describes a launch template version that was successfully deleted.
type DeleteLaunchTemplateVersionsResponseSuccessItem struct {

	// The ID of the launch template.
	LaunchTemplateId *string

	// The name of the launch template.
	LaunchTemplateName *string

	// The version number of the launch template.
	VersionNumber *int64

	noSmithyDocumentSerde
}

// Describes the error for a Reserved Instance whose queued purchase could not be
// deleted.
type DeleteQueuedReservedInstancesError struct {

	// The error code.
	Code DeleteQueuedReservedInstancesErrorCode

	// The error message.
	Message *string

	noSmithyDocumentSerde
}

// Information about the tag keys to deregister for the current Region. You can
// either specify individual tag keys or deregister all tag keys in the current
// Region. You must specify either IncludeAllTagsOfInstance or InstanceTagKeys in
// the request
type DeregisterInstanceTagAttributeRequest struct {

	// Indicates whether to deregister all tag keys in the current Region. Specify
	// false to deregister all tag keys.
	IncludeAllTagsOfInstance *bool

	// Information about the tag keys to deregister.
	InstanceTagKeys []string

	noSmithyDocumentSerde
}

// Describe details about a Windows image with Windows fast launch enabled that
// meets the requested criteria. Criteria are defined by the
// DescribeFastLaunchImages action filters.
type DescribeFastLaunchImagesSuccessItem struct {

	// The image ID that identifies the Windows fast launch enabled image.
	ImageId *string

	// The launch template that the Windows fast launch enabled AMI uses when it
	// launches Windows instances from pre-provisioned snapshots.
	LaunchTemplate *FastLaunchLaunchTemplateSpecificationResponse

	// The maximum number of instances that Amazon EC2 can launch at the same time to
	// create pre-provisioned snapshots for Windows fast launch.
	MaxParallelLaunches *int32

	// The owner ID for the Windows fast launch enabled AMI.
	OwnerId *string

	// The resource type that Amazon EC2 uses for pre-provisioning the Windows AMI.
	// Supported values include: snapshot .
	ResourceType FastLaunchResourceType

	// A group of parameters that are used for pre-provisioning the associated Windows
	// AMI using snapshots.
	SnapshotConfiguration *FastLaunchSnapshotConfigurationResponse

	// The current state of Windows fast launch for the specified Windows AMI.
	State FastLaunchStateCode

	// The reason that Windows fast launch for the AMI changed to the current state.
	StateTransitionReason *string

	// The time that Windows fast launch for the AMI changed to the current state.
	StateTransitionTime *time.Time

	noSmithyDocumentSerde
}

// Describes fast snapshot restores for a snapshot.
type DescribeFastSnapshotRestoreSuccessItem struct {

	// The Availability Zone.
	AvailabilityZone *string

	// The time at which fast snapshot restores entered the disabled state.
	DisabledTime *time.Time

	// The time at which fast snapshot restores entered the disabling state.
	DisablingTime *time.Time

	// The time at which fast snapshot restores entered the enabled state.
	EnabledTime *time.Time

	// The time at which fast snapshot restores entered the enabling state.
	EnablingTime *time.Time

	// The time at which fast snapshot restores entered the optimizing state.
	OptimizingTime *time.Time

	// The Amazon Web Services owner alias that enabled fast snapshot restores on the
	// snapshot. This is intended for future use.
	OwnerAlias *string

	// The ID of the Amazon Web Services account that enabled fast snapshot restores
	// on the snapshot.
	OwnerId *string

	// The ID of the snapshot.
	SnapshotId *string

	// The state of fast snapshot restores.
	State FastSnapshotRestoreStateCode

	// The reason for the state transition. The possible values are as follows:
	//   - Client.UserInitiated - The state successfully transitioned to enabling or
	//   disabling .
	//   - Client.UserInitiated - Lifecycle state transition - The state successfully
	//   transitioned to optimizing , enabled , or disabled .
	StateTransitionReason *string

	noSmithyDocumentSerde
}

// Describes the instances that could not be launched by the fleet.
type DescribeFleetError struct {

	// The error code that indicates why the instance could not be launched. For more
	// information about error codes, see Error codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html)
	// .
	ErrorCode *string

	// The error message that describes why the instance could not be launched. For
	// more information about error messages, see Error codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html.html)
	// .
	ErrorMessage *string

	// The launch templates and overrides that were used for launching the instances.
	// The values that you specify in the Overrides replace the values in the launch
	// template.
	LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse

	// Indicates if the instance that could not be launched was a Spot Instance or
	// On-Demand Instance.
	Lifecycle InstanceLifecycle

	noSmithyDocumentSerde
}

// Describes the instances that were launched by the fleet.
type DescribeFleetsInstances struct {

	// The IDs of the instances.
	InstanceIds []string

	// The instance type.
	InstanceType InstanceType

	// The launch templates and overrides that were used for launching the instances.
	// The values that you specify in the Overrides replace the values in the launch
	// template.
	LaunchTemplateAndOverrides *LaunchTemplateAndOverridesResponse

	// Indicates if the instance that was launched is a Spot Instance or On-Demand
	// Instance.
	Lifecycle InstanceLifecycle

	// The value is Windows for Windows instances. Otherwise, the value is blank.
	Platform PlatformValues

	noSmithyDocumentSerde
}

// Describes the destination options for a flow log.
type DestinationOptionsRequest struct {

	// The format for the flow log. The default is plain-text .
	FileFormat DestinationFileFormat

	// Indicates whether to use Hive-compatible prefixes for flow logs stored in
	// Amazon S3. The default is false .
	HiveCompatiblePartitions *bool

	// Indicates whether to partition the flow log per hour. This reduces the cost and
	// response time for queries. The default is false .
	PerHourPartition *bool

	noSmithyDocumentSerde
}

// Describes the destination options for a flow log.
type DestinationOptionsResponse struct {

	// The format for the flow log.
	FileFormat DestinationFileFormat

	// Indicates whether to use Hive-compatible prefixes for flow logs stored in
	// Amazon S3.
	HiveCompatiblePartitions *bool

	// Indicates whether to partition the flow log per hour.
	PerHourPartition *bool

	noSmithyDocumentSerde
}

// Describes the options for an Amazon Web Services Verified Access
// device-identity based trust provider.
type DeviceOptions struct {

	// The URL Amazon Web Services Verified Access will use to verify the authenticity
	// of the device tokens.
	PublicSigningKeyUrl *string

	// The ID of the tenant application with the device-identity provider.
	TenantId *string

	noSmithyDocumentSerde
}

// Describes a DHCP configuration option.
type DhcpConfiguration struct {

	// The name of a DHCP option.
	Key *string

	// The values for the DHCP option.
	Values []AttributeValue

	noSmithyDocumentSerde
}

// The set of DHCP options.
type DhcpOptions struct {

	// The DHCP options in the set.
	DhcpConfigurations []DhcpConfiguration

	// The ID of the set of DHCP options.
	DhcpOptionsId *string

	// The ID of the Amazon Web Services account that owns the DHCP options set.
	OwnerId *string

	// Any tags assigned to the DHCP options set.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes an Active Directory.
type DirectoryServiceAuthentication struct {

	// The ID of the Active Directory used for authentication.
	DirectoryId *string

	noSmithyDocumentSerde
}

// Describes the Active Directory to be used for client authentication.
type DirectoryServiceAuthenticationRequest struct {

	// The ID of the Active Directory to be used for authentication.
	DirectoryId *string

	noSmithyDocumentSerde
}

// Contains information about the errors that occurred when disabling fast
// snapshot restores.
type DisableFastSnapshotRestoreErrorItem struct {

	// The errors.
	FastSnapshotRestoreStateErrors []DisableFastSnapshotRestoreStateErrorItem

	// The ID of the snapshot.
	SnapshotId *string

	noSmithyDocumentSerde
}

// Describes an error that occurred when disabling fast snapshot restores.
type DisableFastSnapshotRestoreStateError struct {

	// The error code.
	Code *string

	// The error message.
	Message *string

	noSmithyDocumentSerde
}

// Contains information about an error that occurred when disabling fast snapshot
// restores.
type DisableFastSnapshotRestoreStateErrorItem struct {

	// The Availability Zone.
	AvailabilityZone *string

	// The error.
	Error *DisableFastSnapshotRestoreStateError

	noSmithyDocumentSerde
}

// Describes fast snapshot restores that were successfully disabled.
type DisableFastSnapshotRestoreSuccessItem struct {

	// The Availability Zone.
	AvailabilityZone *string

	// The time at which fast snapshot restores entered the disabled state.
	DisabledTime *time.Time

	// The time at which fast snapshot restores entered the disabling state.
	DisablingTime *time.Time

	// The time at which fast snapshot restores entered the enabled state.
	EnabledTime *time.Time

	// The time at which fast snapshot restores entered the enabling state.
	EnablingTime *time.Time

	// The time at which fast snapshot restores entered the optimizing state.
	OptimizingTime *time.Time

	// The Amazon Web Services owner alias that enabled fast snapshot restores on the
	// snapshot. This is intended for future use.
	OwnerAlias *string

	// The ID of the Amazon Web Services account that enabled fast snapshot restores
	// on the snapshot.
	OwnerId *string

	// The ID of the snapshot.
	SnapshotId *string

	// The state of fast snapshot restores for the snapshot.
	State FastSnapshotRestoreStateCode

	// The reason for the state transition. The possible values are as follows:
	//   - Client.UserInitiated - The state successfully transitioned to enabling or
	//   disabling .
	//   - Client.UserInitiated - Lifecycle state transition - The state successfully
	//   transitioned to optimizing , enabled , or disabled .
	StateTransitionReason *string

	noSmithyDocumentSerde
}

// Describes a disk image.
type DiskImage struct {

	// A description of the disk image.
	Description *string

	// Information about the disk image.
	Image *DiskImageDetail

	// Information about the volume.
	Volume *VolumeDetail

	noSmithyDocumentSerde
}

// Describes a disk image.
type DiskImageDescription struct {

	// The checksum computed for the disk image.
	Checksum *string

	// The disk image format.
	Format DiskImageFormat

	// A presigned URL for the import manifest stored in Amazon S3. For information
	// about creating a presigned URL for an Amazon S3 object, read the "Query String
	// Request Authentication Alternative" section of the Authenticating REST Requests (https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html)
	// topic in the Amazon Simple Storage Service Developer Guide. For information
	// about the import manifest referenced by this API action, see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html)
	// .
	ImportManifestUrl *string

	// The size of the disk image, in GiB.
	Size *int64

	noSmithyDocumentSerde
}

// Describes a disk image.
type DiskImageDetail struct {

	// The size of the disk image, in GiB.
	//
	// This member is required.
	Bytes *int64

	// The disk image format.
	//
	// This member is required.
	Format DiskImageFormat

	// A presigned URL for the import manifest stored in Amazon S3 and presented here
	// as an Amazon S3 presigned URL. For information about creating a presigned URL
	// for an Amazon S3 object, read the "Query String Request Authentication
	// Alternative" section of the Authenticating REST Requests (https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html)
	// topic in the Amazon Simple Storage Service Developer Guide. For information
	// about the import manifest referenced by this API action, see VM Import Manifest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html)
	// .
	//
	// This member is required.
	ImportManifestUrl *string

	noSmithyDocumentSerde
}

// Describes a disk image volume.
type DiskImageVolumeDescription struct {

	// The volume identifier.
	Id *string

	// The size of the volume, in GiB.
	Size *int64

	noSmithyDocumentSerde
}

// Describes a disk.
type DiskInfo struct {

	// The number of disks with this configuration.
	Count *int32

	// The size of the disk in GB.
	SizeInGB *int64

	// The type of disk.
	Type DiskType

	noSmithyDocumentSerde
}

// Describes a DNS entry.
type DnsEntry struct {

	// The DNS name.
	DnsName *string

	// The ID of the private hosted zone.
	HostedZoneId *string

	noSmithyDocumentSerde
}

// Describes the DNS options for an endpoint.
type DnsOptions struct {

	// The DNS records created for the endpoint.
	DnsRecordIpType DnsRecordIpType

	// Indicates whether to enable private DNS only for inbound endpoints.
	PrivateDnsOnlyForInboundResolverEndpoint *bool

	noSmithyDocumentSerde
}

// Describes the DNS options for an endpoint.
type DnsOptionsSpecification struct {

	// The DNS records created for the endpoint.
	DnsRecordIpType DnsRecordIpType

	// Indicates whether to enable private DNS only for inbound endpoints. This option
	// is available only for services that support both gateway and interface
	// endpoints. It routes traffic that originates from the VPC to the gateway
	// endpoint and traffic that originates from on-premises to the interface endpoint.
	PrivateDnsOnlyForInboundResolverEndpoint *bool

	noSmithyDocumentSerde
}

// Information about the DNS server to be used.
type DnsServersOptionsModifyStructure struct {

	// The IPv4 address range, in CIDR notation, of the DNS servers to be used. You
	// can specify up to two DNS servers. Ensure that the DNS servers can be reached by
	// the clients. The specified values overwrite the existing values.
	CustomDnsServers []string

	// Indicates whether DNS servers should be used. Specify False to delete the
	// existing DNS servers.
	Enabled *bool

	noSmithyDocumentSerde
}

// Describes a block device for an EBS volume.
type EbsBlockDevice struct {

	// Indicates whether the EBS volume is deleted on instance termination. For more
	// information, see Preserving Amazon EBS volumes on instance termination (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#preserving-volumes-on-termination)
	// in the Amazon EC2 User Guide.
	DeleteOnTermination *bool

	// Indicates whether the encryption state of an EBS volume is changed while being
	// restored from a backing snapshot. The effect of setting the encryption state to
	// true depends on the volume origin (new or from a snapshot), starting encryption
	// state, ownership, and whether encryption by default is enabled. For more
	// information, see Amazon EBS encryption (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-parameters)
	// in the Amazon EC2 User Guide. In no case can you remove encryption from an
	// encrypted volume. Encrypted volumes can only be attached to instances that
	// support Amazon EBS encryption. For more information, see Supported instance
	// types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances)
	// . This parameter is not returned by DescribeImageAttribute . For CreateImage
	// and RegisterImage , whether you can include this parameter, and the allowed
	// values differ depending on the type of block device mapping you are creating.
	//   - If you are creating a block device mapping for a new (empty) volume, you
	//   can include this parameter, and specify either true for an encrypted volume,
	//   or false for an unencrypted volume. If you omit this parameter, it defaults to
	//   false (unencrypted).
	//   - If you are creating a block device mapping from an existing encrypted or
	//   unencrypted snapshot, you must omit this parameter. If you include this
	//   parameter, the request will fail, regardless of the value that you specify.
	//   - If you are creating a block device mapping from an existing unencrypted
	//   volume, you can include this parameter, but you must specify false . If you
	//   specify true , the request will fail. In this case, we recommend that you omit
	//   the parameter.
	//   - If you are creating a block device mapping from an existing encrypted
	//   volume, you can include this parameter, and specify either true or false .
	//   However, if you specify false , the parameter is ignored and the block device
	//   mapping is always encrypted. In this case, we recommend that you omit the
	//   parameter.
	Encrypted *bool

	// The number of I/O operations per second (IOPS). For gp3 , io1 , and io2
	// volumes, this represents the number of IOPS that are provisioned for the volume.
	// For gp2 volumes, this represents the baseline performance of the volume and the
	// rate at which the volume accumulates I/O credits for bursting. The following are
	// the supported values for each volume type:
	//   - gp3 : 3,000 - 16,000 IOPS
	//   - io1 : 100 - 64,000 IOPS
	//   - io2 : 100 - 256,000 IOPS
	// For io2 volumes, you can achieve up to 256,000 IOPS on instances built on the
	// Nitro System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)
	// . On other instances, you can achieve performance up to 32,000 IOPS. This
	// parameter is required for io1 and io2 volumes. The default for gp3 volumes is
	// 3,000 IOPS.
	Iops *int32

	// Identifier (key ID, key alias, ID ARN, or alias ARN) for a customer managed CMK
	// under which the EBS volume is encrypted. This parameter is only supported on
	// BlockDeviceMapping objects called by RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// , RequestSpotFleet (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotFleet.html)
	// , and RequestSpotInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html)
	// .
	KmsKeyId *string

	// The ARN of the Outpost on which the snapshot is stored. This parameter is not
	// supported when using CreateImage (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html)
	// .
	OutpostArn *string

	// The ID of the snapshot.
	SnapshotId *string

	// The throughput that the volume supports, in MiB/s. This parameter is valid only
	// for gp3 volumes. Valid Range: Minimum value of 125. Maximum value of 1000.
	Throughput *int32

	// The size of the volume, in GiBs. You must specify either a snapshot ID or a
	// volume size. If you specify a snapshot, the default is the snapshot size. You
	// can specify a volume size that is equal to or larger than the snapshot size. The
	// following are the supported sizes for each volume type:
	//   - gp2 and gp3 : 1 - 16,384 GiB
	//   - io1 : 4 - 16,384 GiB
	//   - io2 : 4 - 65,536 GiB
	//   - st1 and sc1 : 125 - 16,384 GiB
	//   - standard : 1 - 1024 GiB
	VolumeSize *int32

	// The volume type. For more information, see Amazon EBS volume types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)
	// in the Amazon EC2 User Guide.
	VolumeType VolumeType

	noSmithyDocumentSerde
}

// Describes the Amazon EBS features supported by the instance type.
type EbsInfo struct {

	// Describes the optimized EBS performance for the instance type.
	EbsOptimizedInfo *EbsOptimizedInfo

	// Indicates whether the instance type is Amazon EBS-optimized. For more
	// information, see Amazon EBS-optimized instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html)
	// in Amazon EC2 User Guide.
	EbsOptimizedSupport EbsOptimizedSupport

	// Indicates whether Amazon EBS encryption is supported.
	EncryptionSupport EbsEncryptionSupport

	// Indicates whether non-volatile memory express (NVMe) is supported.
	NvmeSupport EbsNvmeSupport

	noSmithyDocumentSerde
}

// Describes a parameter used to set up an EBS volume in a block device mapping.
type EbsInstanceBlockDevice struct {

	// The ARN of the Amazon ECS or Fargate task to which the volume is attached.
	AssociatedResource *string

	// The time stamp when the attachment initiated.
	AttachTime *time.Time

	// Indicates whether the volume is deleted on instance termination.
	DeleteOnTermination *bool

	// The attachment state.
	Status AttachmentStatus

	// The ID of the EBS volume.
	VolumeId *string

	// The ID of the Amazon Web Services account that owns the volume. This parameter
	// is returned only for volumes that are attached to Fargate tasks.
	VolumeOwnerId *string

	noSmithyDocumentSerde
}

// Describes information used to set up an EBS volume specified in a block device
// mapping.
type EbsInstanceBlockDeviceSpecification struct {

	// Indicates whether the volume is deleted on instance termination.
	DeleteOnTermination *bool

	// The ID of the EBS volume.
	VolumeId *string

	noSmithyDocumentSerde
}

// Describes the optimized EBS performance for supported instance types.
type EbsOptimizedInfo struct {

	// The baseline bandwidth performance for an EBS-optimized instance type, in Mbps.
	BaselineBandwidthInMbps *int32

	// The baseline input/output storage operations per seconds for an EBS-optimized
	// instance type.
	BaselineIops *int32

	// The baseline throughput performance for an EBS-optimized instance type, in MB/s.
	BaselineThroughputInMBps *float64

	// The maximum bandwidth performance for an EBS-optimized instance type, in Mbps.
	MaximumBandwidthInMbps *int32

	// The maximum input/output storage operations per second for an EBS-optimized
	// instance type.
	MaximumIops *int32

	// The maximum throughput performance for an EBS-optimized instance type, in MB/s.
	MaximumThroughputInMBps *float64

	noSmithyDocumentSerde
}

// The EC2 Instance Connect Endpoint.
type Ec2InstanceConnectEndpoint struct {

	// The Availability Zone of the EC2 Instance Connect Endpoint.
	AvailabilityZone *string

	// The date and time that the EC2 Instance Connect Endpoint was created.
	CreatedAt *time.Time

	// The DNS name of the EC2 Instance Connect Endpoint.
	DnsName *string

	//
	FipsDnsName *string

	// The Amazon Resource Name (ARN) of the EC2 Instance Connect Endpoint.
	InstanceConnectEndpointArn *string

	// The ID of the EC2 Instance Connect Endpoint.
	InstanceConnectEndpointId *string

	// The ID of the elastic network interface that Amazon EC2 automatically created
	// when creating the EC2 Instance Connect Endpoint.
	NetworkInterfaceIds []string

	// The ID of the Amazon Web Services account that created the EC2 Instance Connect
	// Endpoint.
	OwnerId *string

	// Indicates whether your client's IP address is preserved as the source. The
	// value is true or false .
	//   - If true , your client's IP address is used when you connect to a resource.
	//   - If false , the elastic network interface IP address is used when you connect
	//   to a resource.
	// Default: true
	PreserveClientIp *bool

	// The security groups associated with the endpoint. If you didn't specify a
	// security group, the default security group for your VPC is associated with the
	// endpoint.
	SecurityGroupIds []string

	// The current state of the EC2 Instance Connect Endpoint.
	State Ec2InstanceConnectEndpointState

	// The message for the current state of the EC2 Instance Connect Endpoint. Can
	// include a failure message.
	StateMessage *string

	// The ID of the subnet in which the EC2 Instance Connect Endpoint was created.
	SubnetId *string

	// The tags assigned to the EC2 Instance Connect Endpoint.
	Tags []Tag

	// The ID of the VPC in which the EC2 Instance Connect Endpoint was created.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes the Elastic Fabric Adapters for the instance type.
type EfaInfo struct {

	// The maximum number of Elastic Fabric Adapters for the instance type.
	MaximumEfaInterfaces *int32

	noSmithyDocumentSerde
}

// Describes an egress-only internet gateway.
type EgressOnlyInternetGateway struct {

	// Information about the attachment of the egress-only internet gateway.
	Attachments []InternetGatewayAttachment

	// The ID of the egress-only internet gateway.
	EgressOnlyInternetGatewayId *string

	// The tags assigned to the egress-only internet gateway.
	Tags []Tag

	noSmithyDocumentSerde
}

// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads
// that require graphics acceleration, we recommend that you use Amazon EC2 G4ad,
// G4dn, or G5 instances. Describes the association between an instance and an
// Elastic Graphics accelerator.
type ElasticGpuAssociation struct {

	// The ID of the association.
	ElasticGpuAssociationId *string

	// The state of the association between the instance and the Elastic Graphics
	// accelerator.
	ElasticGpuAssociationState *string

	// The time the Elastic Graphics accelerator was associated with the instance.
	ElasticGpuAssociationTime *string

	// The ID of the Elastic Graphics accelerator.
	ElasticGpuId *string

	noSmithyDocumentSerde
}

// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads
// that require graphics acceleration, we recommend that you use Amazon EC2 G4ad,
// G4dn, or G5 instances. Describes the status of an Elastic Graphics accelerator.
type ElasticGpuHealth struct {

	// The health status.
	Status ElasticGpuStatus

	noSmithyDocumentSerde
}

// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads
// that require graphics acceleration, we recommend that you use Amazon EC2 G4ad,
// G4dn, or G5 instances. Describes an Elastic Graphics accelerator.
type ElasticGpus struct {

	// The Availability Zone in the which the Elastic Graphics accelerator resides.
	AvailabilityZone *string

	// The status of the Elastic Graphics accelerator.
	ElasticGpuHealth *ElasticGpuHealth

	// The ID of the Elastic Graphics accelerator.
	ElasticGpuId *string

	// The state of the Elastic Graphics accelerator.
	ElasticGpuState ElasticGpuState

	// The type of Elastic Graphics accelerator.
	ElasticGpuType *string

	// The ID of the instance to which the Elastic Graphics accelerator is attached.
	InstanceId *string

	// The tags assigned to the Elastic Graphics accelerator.
	Tags []Tag

	noSmithyDocumentSerde
}

// Amazon Elastic Graphics reached end of life on January 8, 2024. For workloads
// that require graphics acceleration, we recommend that you use Amazon EC2 G4ad,
// G4dn, or G5 instances. A specification for an Elastic Graphics accelerator.
type ElasticGpuSpecification struct {

	// The type of Elastic Graphics accelerator. For more information about the values
	// to specify for Type , see Elastic Graphics Basics (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/elastic-graphics.html#elastic-graphics-basics)
	// , specifically the Elastic Graphics accelerator column, in the Amazon Elastic
	// Compute Cloud User Guide for Windows Instances.
	//
	// This member is required.
	Type *string

	noSmithyDocumentSerde
}

// Deprecated. Amazon Elastic Graphics reached end of life on January 8, 2024. For
// workloads that require graphics acceleration, we recommend that you use Amazon
// EC2 G4ad, G4dn, or G5 instances.
type ElasticGpuSpecificationResponse struct {

	// Deprecated. Amazon Elastic Graphics reached end of life on January 8, 2024. For
	// workloads that require graphics acceleration, we recommend that you use Amazon
	// EC2 G4ad, G4dn, or G5 instances.
	Type *string

	noSmithyDocumentSerde
}

// Describes an elastic inference accelerator.
type ElasticInferenceAccelerator struct {

	// The type of elastic inference accelerator. The possible values are eia1.medium ,
	// eia1.large , eia1.xlarge , eia2.medium , eia2.large , and eia2.xlarge .
	//
	// This member is required.
	Type *string

	// The number of elastic inference accelerators to attach to the instance.
	// Default: 1
	Count *int32

	noSmithyDocumentSerde
}

// Describes the association between an instance and an elastic inference
// accelerator.
type ElasticInferenceAcceleratorAssociation struct {

	// The Amazon Resource Name (ARN) of the elastic inference accelerator.
	ElasticInferenceAcceleratorArn *string

	// The ID of the association.
	ElasticInferenceAcceleratorAssociationId *string

	// The state of the elastic inference accelerator.
	ElasticInferenceAcceleratorAssociationState *string

	// The time at which the elastic inference accelerator is associated with an
	// instance.
	ElasticInferenceAcceleratorAssociationTime *time.Time

	noSmithyDocumentSerde
}

// Contains information about the errors that occurred when enabling fast snapshot
// restores.
type EnableFastSnapshotRestoreErrorItem struct {

	// The errors.
	FastSnapshotRestoreStateErrors []EnableFastSnapshotRestoreStateErrorItem

	// The ID of the snapshot.
	SnapshotId *string

	noSmithyDocumentSerde
}

// Describes an error that occurred when enabling fast snapshot restores.
type EnableFastSnapshotRestoreStateError struct {

	// The error code.
	Code *string

	// The error message.
	Message *string

	noSmithyDocumentSerde
}

// Contains information about an error that occurred when enabling fast snapshot
// restores.
type EnableFastSnapshotRestoreStateErrorItem struct {

	// The Availability Zone.
	AvailabilityZone *string

	// The error.
	Error *EnableFastSnapshotRestoreStateError

	noSmithyDocumentSerde
}

// Describes fast snapshot restores that were successfully enabled.
type EnableFastSnapshotRestoreSuccessItem struct {

	// The Availability Zone.
	AvailabilityZone *string

	// The time at which fast snapshot restores entered the disabled state.
	DisabledTime *time.Time

	// The time at which fast snapshot restores entered the disabling state.
	DisablingTime *time.Time

	// The time at which fast snapshot restores entered the enabled state.
	EnabledTime *time.Time

	// The time at which fast snapshot restores entered the enabling state.
	EnablingTime *time.Time

	// The time at which fast snapshot restores entered the optimizing state.
	OptimizingTime *time.Time

	// The Amazon Web Services owner alias that enabled fast snapshot restores on the
	// snapshot. This is intended for future use.
	OwnerAlias *string

	// The ID of the Amazon Web Services account that enabled fast snapshot restores
	// on the snapshot.
	OwnerId *string

	// The ID of the snapshot.
	SnapshotId *string

	// The state of fast snapshot restores.
	State FastSnapshotRestoreStateCode

	// The reason for the state transition. The possible values are as follows:
	//   - Client.UserInitiated - The state successfully transitioned to enabling or
	//   disabling .
	//   - Client.UserInitiated - Lifecycle state transition - The state successfully
	//   transitioned to optimizing , enabled , or disabled .
	StateTransitionReason *string

	noSmithyDocumentSerde
}

// ENA Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
// technology to increase the maximum bandwidth used per stream and minimize tail
// latency of network traffic between EC2 instances. With ENA Express, you can
// communicate between two EC2 instances in the same subnet within the same
// account, or in different accounts. Both sending and receiving instances must
// have ENA Express enabled. To improve the reliability of network packet delivery,
// ENA Express reorders network packets on the receiving end by default. However,
// some UDP-based applications are designed to handle network packets that are out
// of order to reduce the overhead for packet delivery at the network layer. When
// ENA Express is enabled, you can specify whether UDP network traffic uses it.
type EnaSrdSpecification struct {

	// Indicates whether ENA Express is enabled for the network interface.
	EnaSrdEnabled *bool

	// Configures ENA Express for UDP network traffic.
	EnaSrdUdpSpecification *EnaSrdUdpSpecification

	noSmithyDocumentSerde
}

// Launch instances with ENA Express settings configured from your launch template.
type EnaSrdSpecificationRequest struct {

	// Specifies whether ENA Express is enabled for the network interface when you
	// launch an instance from your launch template.
	EnaSrdEnabled *bool

	// Contains ENA Express settings for UDP network traffic in your launch template.
	EnaSrdUdpSpecification *EnaSrdUdpSpecificationRequest

	noSmithyDocumentSerde
}

// ENA Express is compatible with both TCP and UDP transport protocols. When it's
// enabled, TCP traffic automatically uses it. However, some UDP-based applications
// are designed to handle network packets that are out of order, without a need for
// retransmission, such as live video broadcasting or other near-real-time
// applications. For UDP traffic, you can specify whether to use ENA Express, based
// on your application environment needs.
type EnaSrdUdpSpecification struct {

	// Indicates whether UDP traffic to and from the instance uses ENA Express. To
	// specify this setting, you must first enable ENA Express.
	EnaSrdUdpEnabled *bool

	noSmithyDocumentSerde
}

// Configures ENA Express for UDP network traffic from your launch template.
type EnaSrdUdpSpecificationRequest struct {

	// Indicates whether UDP traffic uses ENA Express for your instance. To ensure
	// that UDP traffic can use ENA Express when you launch an instance, you must also
	// set EnaSrdEnabled in the EnaSrdSpecificationRequest to true in your launch
	// template.
	EnaSrdUdpEnabled *bool

	noSmithyDocumentSerde
}

// Indicates whether the instance is enabled for Amazon Web Services Nitro
// Enclaves.
type EnclaveOptions struct {

	// If this parameter is set to true , the instance is enabled for Amazon Web
	// Services Nitro Enclaves; otherwise, it is not enabled for Amazon Web Services
	// Nitro Enclaves.
	Enabled *bool

	noSmithyDocumentSerde
}

// Indicates whether the instance is enabled for Amazon Web Services Nitro
// Enclaves. For more information, see What is Amazon Web Services Nitro Enclaves? (https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html)
// in the Amazon Web Services Nitro Enclaves User Guide.
type EnclaveOptionsRequest struct {

	// To enable the instance for Amazon Web Services Nitro Enclaves, set this
	// parameter to true .
	Enabled *bool

	noSmithyDocumentSerde
}

// Describes an EC2 Fleet or Spot Fleet event.
type EventInformation struct {

	// The description of the event.
	EventDescription *string

	// The event. error events:
	//   - iamFleetRoleInvalid - The EC2 Fleet or Spot Fleet does not have the required
	//   permissions either to launch or terminate an instance.
	//   - allLaunchSpecsTemporarilyBlacklisted - None of the configurations are valid,
	//   and several attempts to launch instances have failed. For more information, see
	//   the description of the event.
	//   - spotInstanceCountLimitExceeded - You've reached the limit on the number of
	//   Spot Instances that you can launch.
	//   - spotFleetRequestConfigurationInvalid - The configuration is not valid. For
	//   more information, see the description of the event.
	// fleetRequestChange events:
	//   - active - The EC2 Fleet or Spot Fleet request has been validated and Amazon
	//   EC2 is attempting to maintain the target number of running instances.
	//   - deleted (EC2 Fleet) / cancelled (Spot Fleet) - The EC2 Fleet is deleted or
	//   the Spot Fleet request is canceled and has no running instances. The EC2 Fleet
	//   or Spot Fleet will be deleted two days after its instances are terminated.
	//   - deleted_running (EC2 Fleet) / cancelled_running (Spot Fleet) - The EC2 Fleet
	//   is deleted or the Spot Fleet request is canceled and does not launch additional
	//   instances. Its existing instances continue to run until they are interrupted or
	//   terminated. The request remains in this state until all instances are
	//   interrupted or terminated.
	//   - deleted_terminating (EC2 Fleet) / cancelled_terminating (Spot Fleet) - The
	//   EC2 Fleet is deleted or the Spot Fleet request is canceled and its instances are
	//   terminating. The request remains in this state until all instances are
	//   terminated.
	//   - expired - The EC2 Fleet or Spot Fleet request has expired. If the request
	//   was created with TerminateInstancesWithExpiration set, a subsequent terminated
	//   event indicates that the instances are terminated.
	//   - modify_in_progress - The EC2 Fleet or Spot Fleet request is being modified.
	//   The request remains in this state until the modification is fully processed.
	//   - modify_succeeded - The EC2 Fleet or Spot Fleet request was modified.
	//   - submitted - The EC2 Fleet or Spot Fleet request is being evaluated and
	//   Amazon EC2 is preparing to launch the target number of instances.
	//   - progress - The EC2 Fleet or Spot Fleet request is in the process of being
	//   fulfilled.
	// instanceChange events:
	//   - launched - A new instance was launched.
	//   - terminated - An instance was terminated by the user.
	//   - termination_notified - An instance termination notification was sent when a
	//   Spot Instance was terminated by Amazon EC2 during scale-down, when the target
	//   capacity of the fleet was modified down, for example, from a target capacity of
	//   4 to a target capacity of 3.
	// Information events:
	//   - fleetProgressHalted - The price in every launch specification is not valid
	//   because it is below the Spot price (all the launch specifications have produced
	//   launchSpecUnusable events). A launch specification might become valid if the
	//   Spot price changes.
	//   - launchSpecTemporarilyBlacklisted - The configuration is not valid and
	//   several attempts to launch instances have failed. For more information, see the
	//   description of the event.
	//   - launchSpecUnusable - The price in a launch specification is not valid
	//   because it is below the Spot price.
	//   - registerWithLoadBalancersFailed - An attempt to register instances with load
	//   balancers failed. For more information, see the description of the event.
	EventSubType *string

	// The ID of the instance. This information is available only for instanceChange
	// events.
	InstanceId *string

	noSmithyDocumentSerde
}

// Describes an explanation code for an unreachable path. For more information,
// see Reachability Analyzer explanation codes (https://docs.aws.amazon.com/vpc/latest/reachability/explanation-codes.html)
// .
type Explanation struct {

	// The network ACL.
	Acl *AnalysisComponent

	// The network ACL rule.
	AclRule *AnalysisAclRule

	// The IPv4 address, in CIDR notation.
	Address *string

	// The IPv4 addresses, in CIDR notation.
	Addresses []string

	// The resource to which the component is attached.
	AttachedTo *AnalysisComponent

	// The Availability Zones.
	AvailabilityZones []string

	// The CIDR ranges.
	Cidrs []string

	// The listener for a Classic Load Balancer.
	ClassicLoadBalancerListener *AnalysisLoadBalancerListener

	// The component.
	Component *AnalysisComponent

	// The Amazon Web Services account for the component.
	ComponentAccount *string

	// The Region for the component.
	ComponentRegion *string

	// The customer gateway.
	CustomerGateway *AnalysisComponent

	// The destination.
	Destination *AnalysisComponent

	// The destination VPC.
	DestinationVpc *AnalysisComponent

	// The direction. The following are the possible values:
	//   - egress
	//   - ingress
	Direction *string

	// The load balancer listener.
	ElasticLoadBalancerListener *AnalysisComponent

	// The explanation code.
	ExplanationCode *string

	// The Network Firewall stateful rule.
	FirewallStatefulRule *FirewallStatefulRule

	// The Network Firewall stateless rule.
	FirewallStatelessRule *FirewallStatelessRule

	// The route table.
	IngressRouteTable *AnalysisComponent

	// The internet gateway.
	InternetGateway *AnalysisComponent

	// The Amazon Resource Name (ARN) of the load balancer.
	LoadBalancerArn *string

	// The listener port of the load balancer.
	LoadBalancerListenerPort *int32

	// The target.
	LoadBalancerTarget *AnalysisLoadBalancerTarget

	// The target group.
	LoadBalancerTargetGroup *AnalysisComponent

	// The target groups.
	LoadBalancerTargetGroups []AnalysisComponent

	// The target port.
	LoadBalancerTargetPort *int32

	// The missing component.
	MissingComponent *string

	// The NAT gateway.
	NatGateway *AnalysisComponent

	// The network interface.
	NetworkInterface *AnalysisComponent

	// The packet field.
	PacketField *string

	// The port.
	Port *int32

	// The port ranges.
	PortRanges []PortRange

	// The prefix list.
	PrefixList *AnalysisComponent

	// The protocols.
	Protocols []string

	// The route table.
	RouteTable *AnalysisComponent

	// The route table route.
	RouteTableRoute *AnalysisRouteTableRoute

	// The security group.
	SecurityGroup *AnalysisComponent

	// The security group rule.
	SecurityGroupRule *AnalysisSecurityGroupRule

	// The security groups.
	SecurityGroups []AnalysisComponent

	// The source VPC.
	SourceVpc *AnalysisComponent

	// The state.
	State *string

	// The subnet.
	Subnet *AnalysisComponent

	// The route table for the subnet.
	SubnetRouteTable *AnalysisComponent

	// The transit gateway.
	TransitGateway *AnalysisComponent

	// The transit gateway attachment.
	TransitGatewayAttachment *AnalysisComponent

	// The transit gateway route table.
	TransitGatewayRouteTable *AnalysisComponent

	// The transit gateway route table route.
	TransitGatewayRouteTableRoute *TransitGatewayRouteTableRoute

	// The component VPC.
	Vpc *AnalysisComponent

	// The VPC endpoint.
	VpcEndpoint *AnalysisComponent

	// The VPC peering connection.
	VpcPeeringConnection *AnalysisComponent

	// The VPN connection.
	VpnConnection *AnalysisComponent

	// The VPN gateway.
	VpnGateway *AnalysisComponent

	noSmithyDocumentSerde
}

// Describes an export image task.
type ExportImageTask struct {

	// A description of the image being exported.
	Description *string

	// The ID of the export image task.
	ExportImageTaskId *string

	// The ID of the image.
	ImageId *string

	// The percent complete of the export image task.
	Progress *string

	// Information about the destination Amazon S3 bucket.
	S3ExportLocation *ExportTaskS3Location

	// The status of the export image task. The possible values are active , completed
	// , deleting , and deleted .
	Status *string

	// The status message for the export image task.
	StatusMessage *string

	// Any tags assigned to the export image task.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes an export instance task.
type ExportTask struct {

	// A description of the resource being exported.
	Description *string

	// The ID of the export task.
	ExportTaskId *string

	// Information about the export task.
	ExportToS3Task *ExportToS3Task

	// Information about the instance to export.
	InstanceExportDetails *InstanceExportDetails

	// The state of the export task.
	State ExportTaskState

	// The status message related to the export task.
	StatusMessage *string

	// The tags for the export task.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes the destination for an export image task.
type ExportTaskS3Location struct {

	// The destination Amazon S3 bucket.
	S3Bucket *string

	// The prefix (logical hierarchy) in the bucket.
	S3Prefix *string

	noSmithyDocumentSerde
}

// Describes the destination for an export image task.
type ExportTaskS3LocationRequest struct {

	// The destination Amazon S3 bucket.
	//
	// This member is required.
	S3Bucket *string

	// The prefix (logical hierarchy) in the bucket.
	S3Prefix *string

	noSmithyDocumentSerde
}

// Describes the format and location for the export task.
type ExportToS3Task struct {

	// The container format used to combine disk images with metadata (such as OVF).
	// If absent, only the disk image is exported.
	ContainerFormat ContainerFormat

	// The format for the exported image.
	DiskImageFormat DiskImageFormat

	// The Amazon S3 bucket for the destination image. The destination bucket must
	// exist and have an access control list (ACL) attached that specifies the
	// Region-specific canonical account ID for the Grantee . For more information
	// about the ACL to your S3 bucket, see Prerequisites (https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites)
	// in the VM Import/Export User Guide.
	S3Bucket *string

	// The encryption key for your S3 bucket.
	S3Key *string

	noSmithyDocumentSerde
}

// Describes an export instance task.
type ExportToS3TaskSpecification struct {

	// The container format used to combine disk images with metadata (such as OVF).
	// If absent, only the disk image is exported.
	ContainerFormat ContainerFormat

	// The format for the exported image.
	DiskImageFormat DiskImageFormat

	// The Amazon S3 bucket for the destination image. The destination bucket must
	// exist and have an access control list (ACL) attached that specifies the
	// Region-specific canonical account ID for the Grantee . For more information
	// about the ACL to your S3 bucket, see Prerequisites (https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites)
	// in the VM Import/Export User Guide.
	S3Bucket *string

	// The image is written to a single object in the Amazon S3 bucket at the S3 key
	// s3prefix + exportTaskId + '.' + diskImageFormat.
	S3Prefix *string

	noSmithyDocumentSerde
}

// Describes a Capacity Reservation Fleet that could not be cancelled.
type FailedCapacityReservationFleetCancellationResult struct {

	// Information about the Capacity Reservation Fleet cancellation error.
	CancelCapacityReservationFleetError *CancelCapacityReservationFleetError

	// The ID of the Capacity Reservation Fleet that could not be cancelled.
	CapacityReservationFleetId *string

	noSmithyDocumentSerde
}

// Describes a Reserved Instance whose queued purchase was not deleted.
type FailedQueuedPurchaseDeletion struct {

	// The error.
	Error *DeleteQueuedReservedInstancesError

	// The ID of the Reserved Instance.
	ReservedInstancesId *string

	noSmithyDocumentSerde
}

// Request to create a launch template for a Windows fast launch enabled AMI. Note
// - You can specify either the LaunchTemplateName or the LaunchTemplateId , but
// not both.
type FastLaunchLaunchTemplateSpecificationRequest struct {

	// Specify the version of the launch template that the AMI should use for Windows
	// fast launch.
	//
	// This member is required.
	Version *string

	// Specify the ID of the launch template that the AMI should use for Windows fast
	// launch.
	LaunchTemplateId *string

	// Specify the name of the launch template that the AMI should use for Windows
	// fast launch.
	LaunchTemplateName *string

	noSmithyDocumentSerde
}

// Identifies the launch template that the AMI uses for Windows fast launch.
type FastLaunchLaunchTemplateSpecificationResponse struct {

	// The ID of the launch template that the AMI uses for Windows fast launch.
	LaunchTemplateId *string

	// The name of the launch template that the AMI uses for Windows fast launch.
	LaunchTemplateName *string

	// The version of the launch template that the AMI uses for Windows fast launch.
	Version *string

	noSmithyDocumentSerde
}

// Configuration settings for creating and managing pre-provisioned snapshots for
// a Windows fast launch enabled AMI.
type FastLaunchSnapshotConfigurationRequest struct {

	// The number of pre-provisioned snapshots to keep on hand for a Windows fast
	// launch enabled AMI.
	TargetResourceCount *int32

	noSmithyDocumentSerde
}

// Configuration settings for creating and managing pre-provisioned snapshots for
// a Windows fast launch enabled Windows AMI.
type FastLaunchSnapshotConfigurationResponse struct {

	// The number of pre-provisioned snapshots requested to keep on hand for a Windows
	// fast launch enabled AMI.
	TargetResourceCount *int32

	noSmithyDocumentSerde
}

// Describes the IAM SAML identity providers used for federated authentication.
type FederatedAuthentication struct {

	// The Amazon Resource Name (ARN) of the IAM SAML identity provider.
	SamlProviderArn *string

	// The Amazon Resource Name (ARN) of the IAM SAML identity provider for the
	// self-service portal.
	SelfServiceSamlProviderArn *string

	noSmithyDocumentSerde
}

// The IAM SAML identity provider used for federated authentication.
type FederatedAuthenticationRequest struct {

	// The Amazon Resource Name (ARN) of the IAM SAML identity provider.
	SAMLProviderArn *string

	// The Amazon Resource Name (ARN) of the IAM SAML identity provider for the
	// self-service portal.
	SelfServiceSAMLProviderArn *string

	noSmithyDocumentSerde
}

// A filter name and value pair that is used to return a more specific list of
// results from a describe operation. Filters can be used to match a set of
// resources by specific criteria, such as tags, attributes, or IDs. If you specify
// multiple filters, the filters are joined with an AND , and the request returns
// only results that match all of the specified filters.
type Filter struct {

	// The name of the filter. Filter names are case-sensitive.
	Name *string

	// The filter values. Filter values are case-sensitive. If you specify multiple
	// values for a filter, the values are joined with an OR , and the request returns
	// all results that match any of the specified values.
	Values []string

	noSmithyDocumentSerde
}

// Describes a port range.
type FilterPortRange struct {

	// The first port in the range.
	FromPort *int32

	// The last port in the range.
	ToPort *int32

	noSmithyDocumentSerde
}

// Describes a stateful rule.
type FirewallStatefulRule struct {

	// The destination ports.
	DestinationPorts []PortRange

	// The destination IP addresses, in CIDR notation.
	Destinations []string

	// The direction. The possible values are FORWARD and ANY .
	Direction *string

	// The protocol.
	Protocol *string

	// The rule action. The possible values are pass , drop , and alert .
	RuleAction *string

	// The ARN of the stateful rule group.
	RuleGroupArn *string

	// The source ports.
	SourcePorts []PortRange

	// The source IP addresses, in CIDR notation.
	Sources []string

	noSmithyDocumentSerde
}

// Describes a stateless rule.
type FirewallStatelessRule struct {

	// The destination ports.
	DestinationPorts []PortRange

	// The destination IP addresses, in CIDR notation.
	Destinations []string

	// The rule priority.
	Priority *int32

	// The protocols.
	Protocols []int32

	// The rule action. The possible values are pass , drop , and forward_to_site .
	RuleAction *string

	// The ARN of the stateless rule group.
	RuleGroupArn *string

	// The source ports.
	SourcePorts []PortRange

	// The source IP addresses, in CIDR notation.
	Sources []string

	noSmithyDocumentSerde
}

// Information about a Capacity Reservation in a Capacity Reservation Fleet.
type FleetCapacityReservation struct {

	// The Availability Zone in which the Capacity Reservation reserves capacity.
	AvailabilityZone *string

	// The ID of the Availability Zone in which the Capacity Reservation reserves
	// capacity.
	AvailabilityZoneId *string

	// The ID of the Capacity Reservation.
	CapacityReservationId *string

	// The date and time at which the Capacity Reservation was created.
	CreateDate *time.Time

	// Indicates whether the Capacity Reservation reserves capacity for EBS-optimized
	// instance types.
	EbsOptimized *bool

	// The number of capacity units fulfilled by the Capacity Reservation. For more
	// information, see Total target capacity (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity)
	// in the Amazon EC2 User Guide.
	FulfilledCapacity *float64

	// The type of operating system for which the Capacity Reservation reserves
	// capacity.
	InstancePlatform CapacityReservationInstancePlatform

	// The instance type for which the Capacity Reservation reserves capacity.
	InstanceType InstanceType

	// The priority of the instance type in the Capacity Reservation Fleet. For more
	// information, see Instance type priority (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority)
	// in the Amazon EC2 User Guide.
	Priority *int32

	// The total number of instances for which the Capacity Reservation reserves
	// capacity.
	TotalInstanceCount *int32

	// The weight of the instance type in the Capacity Reservation Fleet. For more
	// information, see Instance type weight (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-weight)
	// in the Amazon EC2 User Guide.
	Weight *float64

	noSmithyDocumentSerde
}

// Describes an EC2 Fleet.
type FleetData struct {

	// The progress of the EC2 Fleet. If there is an error, the status is error . After
	// all requests are placed, the status is pending_fulfillment . If the size of the
	// EC2 Fleet is equal to or greater than its target capacity, the status is
	// fulfilled . If the size of the EC2 Fleet is decreased, the status is
	// pending_termination while instances are terminating.
	ActivityStatus FleetActivityStatus

	// Unique, case-sensitive identifier that you provide to ensure the idempotency of
	// the request. For more information, see Ensuring idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html)
	// . Constraints: Maximum 64 ASCII characters
	ClientToken *string

	// Reserved.
	Context *string

	// The creation date and time of the EC2 Fleet.
	CreateTime *time.Time

	// Information about the instances that could not be launched by the fleet. Valid
	// only when Type is set to instant .
	Errors []DescribeFleetError

	// Indicates whether running instances should be terminated if the target capacity
	// of the EC2 Fleet is decreased below the current size of the EC2 Fleet. Supported
	// only for fleets of type maintain .
	ExcessCapacityTerminationPolicy FleetExcessCapacityTerminationPolicy

	// The ID of the EC2 Fleet.
	FleetId *string

	// The state of the EC2 Fleet.
	FleetState FleetStateCode

	// The number of units fulfilled by this request compared to the set target
	// capacity.
	FulfilledCapacity *float64

	// The number of units fulfilled by this request compared to the set target
	// On-Demand capacity.
	FulfilledOnDemandCapacity *float64

	// Information about the instances that were launched by the fleet. Valid only
	// when Type is set to instant .
	Instances []DescribeFleetsInstances

	// The launch template and overrides.
	LaunchTemplateConfigs []FleetLaunchTemplateConfig

	// The allocation strategy of On-Demand Instances in an EC2 Fleet.
	OnDemandOptions *OnDemandOptions

	// Indicates whether EC2 Fleet should replace unhealthy Spot Instances. Supported
	// only for fleets of type maintain . For more information, see EC2 Fleet health
	// checks (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/manage-ec2-fleet.html#ec2-fleet-health-checks)
	// in the Amazon EC2 User Guide.
	ReplaceUnhealthyInstances *bool

	// The configuration of Spot Instances in an EC2 Fleet.
	SpotOptions *SpotOptions

	// The tags for an EC2 Fleet resource.
	Tags []Tag

	// The number of units to request. You can choose to set the target capacity in
	// terms of instances or a performance characteristic that is important to your
	// application workload, such as vCPUs, memory, or I/O. If the request type is
	// maintain , you can specify a target capacity of 0 and add capacity later.
	TargetCapacitySpecification *TargetCapacitySpecification

	// Indicates whether running instances should be terminated when the EC2 Fleet
	// expires.
	TerminateInstancesWithExpiration *bool

	// The type of request. Indicates whether the EC2 Fleet only requests the target
	// capacity, or also attempts to maintain it. If you request a certain target
	// capacity, EC2 Fleet only places the required requests; it does not attempt to
	// replenish instances if capacity is diminished, and it does not submit requests
	// in alternative capacity pools if capacity is unavailable. To maintain a certain
	// target capacity, EC2 Fleet places the required requests to meet this target
	// capacity. It also automatically replenishes any interrupted Spot Instances.
	// Default: maintain .
	Type FleetType

	// The start date and time of the request, in UTC format (for example,
	// YYYY-MM-DDTHH:MM:SSZ). The default is to start fulfilling the request
	// immediately.
	ValidFrom *time.Time

	// The end date and time of the request, in UTC format (for example,
	// YYYY-MM-DDTHH:MM:SSZ). At this point, no new instance requests are placed or
	// able to fulfill the request. The default end date is 7 days from the current
	// date.
	ValidUntil *time.Time

	noSmithyDocumentSerde
}

// Describes a launch template and overrides.
type FleetLaunchTemplateConfig struct {

	// The launch template.
	LaunchTemplateSpecification *FleetLaunchTemplateSpecification

	// Any parameters that you specify override the same parameters in the launch
	// template.
	Overrides []FleetLaunchTemplateOverrides

	noSmithyDocumentSerde
}

// Describes a launch template and overrides.
type FleetLaunchTemplateConfigRequest struct {

	// The launch template to use. You must specify either the launch template ID or
	// launch template name in the request.
	LaunchTemplateSpecification *FleetLaunchTemplateSpecificationRequest

	// Any parameters that you specify override the same parameters in the launch
	// template. For fleets of type request and maintain , a maximum of 300 items is
	// allowed across all launch templates.
	Overrides []FleetLaunchTemplateOverridesRequest

	noSmithyDocumentSerde
}

// Describes overrides for a launch template.
type FleetLaunchTemplateOverrides struct {

	// The Availability Zone in which to launch the instances.
	AvailabilityZone *string

	// The ID of the AMI. An AMI is required to launch an instance. This parameter is
	// only available for fleets of type instant . For fleets of type maintain and
	// request , you must specify the AMI ID in the launch template.
	ImageId *string

	// The attributes for the instance types. When you specify instance attributes,
	// Amazon EC2 will identify instance types with those attributes. If you specify
	// InstanceRequirements , you can't specify InstanceType .
	InstanceRequirements *InstanceRequirements

	// The instance type. mac1.metal is not supported as a launch template override.
	// If you specify InstanceType , you can't specify InstanceRequirements .
	InstanceType InstanceType

	// The maximum price per unit hour that you are willing to pay for a Spot
	// Instance. We do not recommend using this parameter because it can lead to
	// increased interruptions. If you do not specify this parameter, you will pay the
	// current Spot price. If you specify a maximum price, your instances will be
	// interrupted more frequently than if you do not specify this parameter.
	MaxPrice *string

	// The location where the instance launched, if applicable.
	Placement *PlacementResponse

	// The priority for the launch template override. The highest priority is launched
	// first. If the On-Demand AllocationStrategy is set to prioritized , EC2 Fleet
	// uses priority to determine which launch template override to use first in
	// fulfilling On-Demand capacity. If the Spot AllocationStrategy is set to
	// capacity-optimized-prioritized , EC2 Fleet uses priority on a best-effort basis
	// to determine which launch template override to use in fulfilling Spot capacity,
	// but optimizes for capacity first. Valid values are whole numbers starting at 0 .
	// The lower the number, the higher the priority. If no number is set, the override
	// has the lowest priority. You can set the same priority for different launch
	// template overrides.
	Priority *float64

	// The ID of the subnet in which to launch the instances.
	SubnetId *string

	// The number of units provided by the specified instance type.
	WeightedCapacity *float64

	noSmithyDocumentSerde
}

// Describes overrides for a launch template.
type FleetLaunchTemplateOverridesRequest struct {

	// The Availability Zone in which to launch the instances.
	AvailabilityZone *string

	// The ID of the AMI. An AMI is required to launch an instance. This parameter is
	// only available for fleets of type instant . For fleets of type maintain and
	// request , you must specify the AMI ID in the launch template.
	ImageId *string

	// The attributes for the instance types. When you specify instance attributes,
	// Amazon EC2 will identify instance types with those attributes. If you specify
	// InstanceRequirements , you can't specify InstanceType .
	InstanceRequirements *InstanceRequirementsRequest

	// The instance type. mac1.metal is not supported as a launch template override.
	// If you specify InstanceType , you can't specify InstanceRequirements .
	InstanceType InstanceType

	// The maximum price per unit hour that you are willing to pay for a Spot
	// Instance. We do not recommend using this parameter because it can lead to
	// increased interruptions. If you do not specify this parameter, you will pay the
	// current Spot price. If you specify a maximum price, your instances will be
	// interrupted more frequently than if you do not specify this parameter.
	MaxPrice *string

	// The location where the instance launched, if applicable.
	Placement *Placement

	// The priority for the launch template override. The highest priority is launched
	// first. If the On-Demand AllocationStrategy is set to prioritized , EC2 Fleet
	// uses priority to determine which launch template override to use first in
	// fulfilling On-Demand capacity. If the Spot AllocationStrategy is set to
	// capacity-optimized-prioritized , EC2 Fleet uses priority on a best-effort basis
	// to determine which launch template override to use in fulfilling Spot capacity,
	// but optimizes for capacity first. Valid values are whole numbers starting at 0 .
	// The lower the number, the higher the priority. If no number is set, the launch
	// template override has the lowest priority. You can set the same priority for
	// different launch template overrides.
	Priority *float64

	// The IDs of the subnets in which to launch the instances. Separate multiple
	// subnet IDs using commas (for example, subnet-1234abcdeexample1,
	// subnet-0987cdef6example2 ). A request of type instant can have only one subnet
	// ID.
	SubnetId *string

	// The number of units provided by the specified instance type.
	WeightedCapacity *float64

	noSmithyDocumentSerde
}

// The Amazon EC2 launch template that can be used by a Spot Fleet to configure
// Amazon EC2 instances. You must specify either the ID or name of the launch
// template in the request, but not both. For information about launch templates,
// see Launch an instance from a launch template (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)
// in the Amazon EC2 User Guide.
type FleetLaunchTemplateSpecification struct {

	// The ID of the launch template. You must specify the LaunchTemplateId or the
	// LaunchTemplateName , but not both.
	LaunchTemplateId *string

	// The name of the launch template. You must specify the LaunchTemplateName or the
	// LaunchTemplateId , but not both.
	LaunchTemplateName *string

	// The launch template version number, $Latest , or $Default . You must specify a
	// value, otherwise the request fails. If the value is $Latest , Amazon EC2 uses
	// the latest version of the launch template. If the value is $Default , Amazon EC2
	// uses the default version of the launch template.
	Version *string

	noSmithyDocumentSerde
}

// The Amazon EC2 launch template that can be used by an EC2 Fleet to configure
// Amazon EC2 instances. You must specify either the ID or name of the launch
// template in the request, but not both. For information about launch templates,
// see Launch an instance from a launch template (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html)
// in the Amazon EC2 User Guide.
type FleetLaunchTemplateSpecificationRequest struct {

	// The ID of the launch template. You must specify the LaunchTemplateId or the
	// LaunchTemplateName , but not both.
	LaunchTemplateId *string

	// The name of the launch template. You must specify the LaunchTemplateName or the
	// LaunchTemplateId , but not both.
	LaunchTemplateName *string

	// The launch template version number, $Latest , or $Default . You must specify a
	// value, otherwise the request fails. If the value is $Latest , Amazon EC2 uses
	// the latest version of the launch template. If the value is $Default , Amazon EC2
	// uses the default version of the launch template.
	Version *string

	noSmithyDocumentSerde
}

// The strategy to use when Amazon EC2 emits a signal that your Spot Instance is
// at an elevated risk of being interrupted.
type FleetSpotCapacityRebalance struct {

	// The replacement strategy to use. Only available for fleets of type maintain .
	// launch - EC2 Fleet launches a new replacement Spot Instance when a rebalance
	// notification is emitted for an existing Spot Instance in the fleet. EC2 Fleet
	// does not terminate the instances that receive a rebalance notification. You can
	// terminate the old instances, or you can leave them running. You are charged for
	// all instances while they are running. launch-before-terminate - EC2 Fleet
	// launches a new replacement Spot Instance when a rebalance notification is
	// emitted for an existing Spot Instance in the fleet, and then, after a delay that
	// you specify (in TerminationDelay ), terminates the instances that received a
	// rebalance notification.
	ReplacementStrategy FleetReplacementStrategy

	// The amount of time (in seconds) that Amazon EC2 waits before terminating the
	// old Spot Instance after launching a new replacement Spot Instance. Required when
	// ReplacementStrategy is set to launch-before-terminate . Not valid when
	// ReplacementStrategy is set to launch . Valid values: Minimum value of 120
	// seconds. Maximum value of 7200 seconds.
	TerminationDelay *int32

	noSmithyDocumentSerde
}

// The Spot Instance replacement strategy to use when Amazon EC2 emits a rebalance
// notification signal that your Spot Instance is at an elevated risk of being
// interrupted. For more information, see Capacity rebalancing (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-capacity-rebalance.html)
// in the Amazon EC2 User Guide.
type FleetSpotCapacityRebalanceRequest struct {

	// The replacement strategy to use. Only available for fleets of type maintain .
	// launch - EC2 Fleet launches a replacement Spot Instance when a rebalance
	// notification is emitted for an existing Spot Instance in the fleet. EC2 Fleet
	// does not terminate the instances that receive a rebalance notification. You can
	// terminate the old instances, or you can leave them running. You are charged for
	// all instances while they are running. launch-before-terminate - EC2 Fleet
	// launches a replacement Spot Instance when a rebalance notification is emitted
	// for an existing Spot Instance in the fleet, and then, after a delay that you
	// specify (in TerminationDelay ), terminates the instances that received a
	// rebalance notification.
	ReplacementStrategy FleetReplacementStrategy

	// The amount of time (in seconds) that Amazon EC2 waits before terminating the
	// old Spot Instance after launching a new replacement Spot Instance. Required when
	// ReplacementStrategy is set to launch-before-terminate . Not valid when
	// ReplacementStrategy is set to launch . Valid values: Minimum value of 120
	// seconds. Maximum value of 7200 seconds.
	TerminationDelay *int32

	noSmithyDocumentSerde
}

// The strategies for managing your Spot Instances that are at an elevated risk of
// being interrupted.
type FleetSpotMaintenanceStrategies struct {

	// The strategy to use when Amazon EC2 emits a signal that your Spot Instance is
	// at an elevated risk of being interrupted.
	CapacityRebalance *FleetSpotCapacityRebalance

	noSmithyDocumentSerde
}

// The strategies for managing your Spot Instances that are at an elevated risk of
// being interrupted.
type FleetSpotMaintenanceStrategiesRequest struct {

	// The strategy to use when Amazon EC2 emits a signal that your Spot Instance is
	// at an elevated risk of being interrupted.
	CapacityRebalance *FleetSpotCapacityRebalanceRequest

	noSmithyDocumentSerde
}

// Describes a flow log.
type FlowLog struct {

	// The date and time the flow log was created.
	CreationTime *time.Time

	// The ARN of the IAM role that allows the service to publish flow logs across
	// accounts.
	DeliverCrossAccountRole *string

	// Information about the error that occurred. Rate limited indicates that
	// CloudWatch Logs throttling has been applied for one or more network interfaces,
	// or that you've reached the limit on the number of log groups that you can
	// create. Access error indicates that the IAM role associated with the flow log
	// does not have sufficient permissions to publish to CloudWatch Logs. Unknown
	// error indicates an internal error.
	DeliverLogsErrorMessage *string

	// The ARN of the IAM role allows the service to publish logs to CloudWatch Logs.
	DeliverLogsPermissionArn *string

	// The status of the logs delivery ( SUCCESS | FAILED ).
	DeliverLogsStatus *string

	// The destination options.
	DestinationOptions *DestinationOptionsResponse

	// The ID of the flow log.
	FlowLogId *string

	// The status of the flow log ( ACTIVE ).
	FlowLogStatus *string

	// The Amazon Resource Name (ARN) of the destination for the flow log data.
	LogDestination *string

	// The type of destination for the flow log data.
	LogDestinationType LogDestinationType

	// The format of the flow log record.
	LogFormat *string

	// The name of the flow log group.
	LogGroupName *string

	// The maximum interval of time, in seconds, during which a flow of packets is
	// captured and aggregated into a flow log record. When a network interface is
	// attached to a Nitro-based instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)
	// , the aggregation interval is always 60 seconds (1 minute) or less, regardless
	// of the specified value. Valid Values: 60 | 600
	MaxAggregationInterval *int32

	// The ID of the resource being monitored.
	ResourceId *string

	// The tags for the flow log.
	Tags []Tag

	// The type of traffic captured for the flow log.
	TrafficType TrafficType

	noSmithyDocumentSerde
}

// Describes the FPGA accelerator for the instance type.
type FpgaDeviceInfo struct {

	// The count of FPGA accelerators for the instance type.
	Count *int32

	// The manufacturer of the FPGA accelerator.
	Manufacturer *string

	// Describes the memory for the FPGA accelerator for the instance type.
	MemoryInfo *FpgaDeviceMemoryInfo

	// The name of the FPGA accelerator.
	Name *string

	noSmithyDocumentSerde
}

// Describes the memory for the FPGA accelerator for the instance type.
type FpgaDeviceMemoryInfo struct {

	// The size of the memory available to the FPGA accelerator, in MiB.
	SizeInMiB *int32

	noSmithyDocumentSerde
}

// Describes an Amazon FPGA image (AFI).
type FpgaImage struct {

	// The date and time the AFI was created.
	CreateTime *time.Time

	// Indicates whether data retention support is enabled for the AFI.
	DataRetentionSupport *bool

	// The description of the AFI.
	Description *string

	// The global FPGA image identifier (AGFI ID).
	FpgaImageGlobalId *string

	// The FPGA image identifier (AFI ID).
	FpgaImageId *string

	// The instance types supported by the AFI.
	InstanceTypes []string

	// The name of the AFI.
	Name *string

	// The alias of the AFI owner. Possible values include self , amazon , and
	// aws-marketplace .
	OwnerAlias *string

	// The ID of the Amazon Web Services account that owns the AFI.
	OwnerId *string

	// Information about the PCI bus.
	PciId *PciId

	// The product codes for the AFI.
	ProductCodes []ProductCode

	// Indicates whether the AFI is public.
	Public *bool

	// The version of the Amazon Web Services Shell that was used to create the
	// bitstream.
	ShellVersion *string

	// Information about the state of the AFI.
	State *FpgaImageState

	// Any tags assigned to the AFI.
	Tags []Tag

	// The time of the most recent update to the AFI.
	UpdateTime *time.Time

	noSmithyDocumentSerde
}

// Describes an Amazon FPGA image (AFI) attribute.
type FpgaImageAttribute struct {

	// The description of the AFI.
	Description *string

	// The ID of the AFI.
	FpgaImageId *string

	// The load permissions.
	LoadPermissions []LoadPermission

	// The name of the AFI.
	Name *string

	// The product codes.
	ProductCodes []ProductCode

	noSmithyDocumentSerde
}

// Describes the state of the bitstream generation process for an Amazon FPGA
// image (AFI).
type FpgaImageState struct {

	// The state. The following are the possible values:
	//   - pending - AFI bitstream generation is in progress.
	//   - available - The AFI is available for use.
	//   - failed - AFI bitstream generation failed.
	//   - unavailable - The AFI is no longer available for use.
	Code FpgaImageStateCode

	// If the state is failed , this is the error message.
	Message *string

	noSmithyDocumentSerde
}

// Describes the FPGAs for the instance type.
type FpgaInfo struct {

	// Describes the FPGAs for the instance type.
	Fpgas []FpgaDeviceInfo

	// The total memory of all FPGA accelerators for the instance type.
	TotalFpgaMemoryInMiB *int32

	noSmithyDocumentSerde
}

// Describes the GPU accelerators for the instance type.
type GpuDeviceInfo struct {

	// The number of GPUs for the instance type.
	Count *int32

	// The manufacturer of the GPU accelerator.
	Manufacturer *string

	// Describes the memory available to the GPU accelerator.
	MemoryInfo *GpuDeviceMemoryInfo

	// The name of the GPU accelerator.
	Name *string

	noSmithyDocumentSerde
}

// Describes the memory available to the GPU accelerator.
type GpuDeviceMemoryInfo struct {

	// The size of the memory available to the GPU accelerator, in MiB.
	SizeInMiB *int32

	noSmithyDocumentSerde
}

// Describes the GPU accelerators for the instance type.
type GpuInfo struct {

	// Describes the GPU accelerators for the instance type.
	Gpus []GpuDeviceInfo

	// The total size of the memory for the GPU accelerators for the instance type, in
	// MiB.
	TotalGpuMemoryInMiB *int32

	noSmithyDocumentSerde
}

// Describes a security group.
type GroupIdentifier struct {

	// The ID of the security group.
	GroupId *string

	// The name of the security group.
	GroupName *string

	noSmithyDocumentSerde
}

// Indicates whether your instance is configured for hibernation. This parameter
// is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)
// . For more information, see Hibernate your instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html)
// in the Amazon EC2 User Guide.
type HibernationOptions struct {

	// If true , your instance is enabled for hibernation; otherwise, it is not enabled
	// for hibernation.
	Configured *bool

	noSmithyDocumentSerde
}

// Indicates whether your instance is configured for hibernation. This parameter
// is valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)
// . For more information, see Hibernate your instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html)
// in the Amazon EC2 User Guide.
type HibernationOptionsRequest struct {

	// Set to true to enable your instance for hibernation. For Spot Instances, if you
	// set Configured to true , either omit the InstanceInterruptionBehavior parameter
	// (for SpotMarketOptions (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotMarketOptions.html)
	// ), or set it to hibernate . When Configured is true:
	//   - If you omit InstanceInterruptionBehavior , it defaults to hibernate .
	//   - If you set InstanceInterruptionBehavior to a value other than hibernate ,
	//   you'll get an error.
	// Default: false
	Configured *bool

	noSmithyDocumentSerde
}

// Describes an event in the history of the Spot Fleet request.
type HistoryRecord struct {

	// Information about the event.
	EventInformation *EventInformation

	// The event type.
	//   - error - An error with the Spot Fleet request.
	//   - fleetRequestChange - A change in the status or configuration of the Spot
	//   Fleet request.
	//   - instanceChange - An instance was launched or terminated.
	//   - Information - An informational event.
	EventType EventType

	// The date and time of the event, in UTC format (for example,
	// YYYY-MM-DDTHH:MM:SSZ).
	Timestamp *time.Time

	noSmithyDocumentSerde
}

// Describes an event in the history of an EC2 Fleet.
type HistoryRecordEntry struct {

	// Information about the event.
	EventInformation *EventInformation

	// The event type.
	EventType FleetEventType

	// The date and time of the event, in UTC format (for example,
	// YYYY-MM-DDTHH:MM:SSZ).
	Timestamp *time.Time

	noSmithyDocumentSerde
}

// Describes the properties of the Dedicated Host.
type Host struct {

	// The time that the Dedicated Host was allocated.
	AllocationTime *time.Time

	// Indicates whether the Dedicated Host supports multiple instance types of the
	// same instance family. If the value is on , the Dedicated Host supports multiple
	// instance types in the instance family. If the value is off , the Dedicated Host
	// supports a single instance type only.
	AllowsMultipleInstanceTypes AllowsMultipleInstanceTypes

	// The ID of the Outpost hardware asset on which the Dedicated Host is allocated.
	AssetId *string

	// Whether auto-placement is on or off.
	AutoPlacement AutoPlacement

	// The Availability Zone of the Dedicated Host.
	AvailabilityZone *string

	// The ID of the Availability Zone in which the Dedicated Host is allocated.
	AvailabilityZoneId *string

	// Information about the instances running on the Dedicated Host.
	AvailableCapacity *AvailableCapacity

	// Unique, case-sensitive identifier that you provide to ensure the idempotency of
	// the request. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html)
	// .
	ClientToken *string

	// The ID of the Dedicated Host.
	HostId *string

	// Indicates whether host maintenance is enabled or disabled for the Dedicated
	// Host.
	HostMaintenance HostMaintenance

	// The hardware specifications of the Dedicated Host.
	HostProperties *HostProperties

	// Indicates whether host recovery is enabled or disabled for the Dedicated Host.
	HostRecovery HostRecovery

	// The reservation ID of the Dedicated Host. This returns a null response if the
	// Dedicated Host doesn't have an associated reservation.
	HostReservationId *string

	// The IDs and instance type that are currently running on the Dedicated Host.
	Instances []HostInstance

	// Indicates whether the Dedicated Host is in a host resource group. If
	// memberOfServiceLinkedResourceGroup is true , the host is in a host resource
	// group; otherwise, it is not.
	MemberOfServiceLinkedResourceGroup *bool

	// The Amazon Resource Name (ARN) of the Amazon Web Services Outpost on which the
	// Dedicated Host is allocated.
	OutpostArn *string

	// The ID of the Amazon Web Services account that owns the Dedicated Host.
	OwnerId *string

	// The time that the Dedicated Host was released.
	ReleaseTime *time.Time

	// The Dedicated Host's state.
	State AllocationState

	// Any tags assigned to the Dedicated Host.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes an instance running on a Dedicated Host.
type HostInstance struct {

	// The ID of instance that is running on the Dedicated Host.
	InstanceId *string

	// The instance type (for example, m3.medium ) of the running instance.
	InstanceType *string

	// The ID of the Amazon Web Services account that owns the instance.
	OwnerId *string

	noSmithyDocumentSerde
}

// Details about the Dedicated Host Reservation offering.
type HostOffering struct {

	// The currency of the offering.
	CurrencyCode CurrencyCodeValues

	// The duration of the offering (in seconds).
	Duration *int32

	// The hourly price of the offering.
	HourlyPrice *string

	// The instance family of the offering.
	InstanceFamily *string

	// The ID of the offering.
	OfferingId *string

	// The available payment option.
	PaymentOption PaymentOption

	// The upfront price of the offering. Does not apply to No Upfront offerings.
	UpfrontPrice *string

	noSmithyDocumentSerde
}

// Describes the properties of a Dedicated Host.
type HostProperties struct {

	// The number of cores on the Dedicated Host.
	Cores *int32

	// The instance family supported by the Dedicated Host. For example, m5 .
	InstanceFamily *string

	// The instance type supported by the Dedicated Host. For example, m5.large . If
	// the host supports multiple instance types, no instanceType is returned.
	InstanceType *string

	// The number of sockets on the Dedicated Host.
	Sockets *int32

	// The total number of vCPUs on the Dedicated Host.
	TotalVCpus *int32

	noSmithyDocumentSerde
}

// Details about the Dedicated Host Reservation and associated Dedicated Hosts.
type HostReservation struct {

	// The number of Dedicated Hosts the reservation is associated with.
	Count *int32

	// The currency in which the upfrontPrice and hourlyPrice amounts are specified.
	// At this time, the only supported currency is USD .
	CurrencyCode CurrencyCodeValues

	// The length of the reservation's term, specified in seconds. Can be 31536000 (1
	// year) | 94608000 (3 years) .
	Duration *int32

	// The date and time that the reservation ends.
	End *time.Time

	// The IDs of the Dedicated Hosts associated with the reservation.
	HostIdSet []string

	// The ID of the reservation that specifies the associated Dedicated Hosts.
	HostReservationId *string

	// The hourly price of the reservation.
	HourlyPrice *string

	// The instance family of the Dedicated Host Reservation. The instance family on
	// the Dedicated Host must be the same in order for it to benefit from the
	// reservation.
	InstanceFamily *string

	// The ID of the reservation. This remains the same regardless of which Dedicated
	// Hosts are associated with it.
	OfferingId *string

	// The payment option selected for this reservation.
	PaymentOption PaymentOption

	// The date and time that the reservation started.
	Start *time.Time

	// The state of the reservation.
	State ReservationState

	// Any tags assigned to the Dedicated Host Reservation.
	Tags []Tag

	// The upfront price of the reservation.
	UpfrontPrice *string

	noSmithyDocumentSerde
}

// Describes an IAM instance profile.
type IamInstanceProfile struct {

	// The Amazon Resource Name (ARN) of the instance profile.
	Arn *string

	// The ID of the instance profile.
	Id *string

	noSmithyDocumentSerde
}

// Describes an association between an IAM instance profile and an instance.
type IamInstanceProfileAssociation struct {

	// The ID of the association.
	AssociationId *string

	// The IAM instance profile.
	IamInstanceProfile *IamInstanceProfile

	// The ID of the instance.
	InstanceId *string

	// The state of the association.
	State IamInstanceProfileAssociationState

	// The time the IAM instance profile was associated with the instance.
	Timestamp *time.Time

	noSmithyDocumentSerde
}

// Describes an IAM instance profile.
type IamInstanceProfileSpecification struct {

	// The Amazon Resource Name (ARN) of the instance profile.
	Arn *string

	// The name of the instance profile.
	Name *string

	noSmithyDocumentSerde
}

// Describes the ICMP type and code.
type IcmpTypeCode struct {

	// The ICMP code. A value of -1 means all codes for the specified ICMP type.
	Code *int32

	// The ICMP type. A value of -1 means all types.
	Type *int32

	noSmithyDocumentSerde
}

// Describes the ID format for a resource.
type IdFormat struct {

	// The date in UTC at which you are permanently switched over to using longer IDs.
	// If a deadline is not yet available for this resource type, this field is not
	// returned.
	Deadline *time.Time

	// The type of resource.
	Resource *string

	// Indicates whether longer IDs (17-character IDs) are enabled for the resource.
	UseLongIds *bool

	noSmithyDocumentSerde
}

// The internet key exchange (IKE) version permitted for the VPN tunnel.
type IKEVersionsListValue struct {

	// The IKE version.
	Value *string

	noSmithyDocumentSerde
}

// The IKE version that is permitted for the VPN tunnel.
type IKEVersionsRequestListValue struct {

	// The IKE version.
	Value *string

	noSmithyDocumentSerde
}

// Describes an image.
type Image struct {

	// The architecture of the image.
	Architecture ArchitectureValues

	// Any block device mapping entries.
	BlockDeviceMappings []BlockDeviceMapping

	// The boot mode of the image. For more information, see Boot modes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html)
	// in the Amazon EC2 User Guide.
	BootMode BootModeValues

	// The date and time the image was created.
	CreationDate *string

	// The date and time to deprecate the AMI, in UTC, in the following format:
	// YYYY-MM-DDTHH:MM:SSZ. If you specified a value for seconds, Amazon EC2 rounds
	// the seconds to the nearest minute.
	DeprecationTime *string

	// The description of the AMI that was provided during image creation.
	Description *string

	// Specifies whether enhanced networking with ENA is enabled.
	EnaSupport *bool

	// The hypervisor type of the image. Only xen is supported. ovm is not supported.
	Hypervisor HypervisorType

	// The ID of the AMI.
	ImageId *string

	// The location of the AMI.
	ImageLocation *string

	// The Amazon Web Services account alias (for example, amazon , self ) or the
	// Amazon Web Services account ID of the AMI owner.
	ImageOwnerAlias *string

	// The type of image.
	ImageType ImageTypeValues

	// If v2.0 , it indicates that IMDSv2 is specified in the AMI. Instances launched
	// from this AMI will have HttpTokens automatically set to required so that, by
	// default, the instance requires that IMDSv2 is used when requesting instance
	// metadata. In addition, HttpPutResponseHopLimit is set to 2 . For more
	// information, see Configure the AMI (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration)
	// in the Amazon EC2 User Guide.
	ImdsSupport ImdsSupportValues

	// The kernel associated with the image, if any. Only applicable for machine
	// images.
	KernelId *string

	// The name of the AMI that was provided during image creation.
	Name *string

	// The ID of the Amazon Web Services account that owns the image.
	OwnerId *string

	// This value is set to windows for Windows AMIs; otherwise, it is blank.
	Platform PlatformValues

	// The platform details associated with the billing code of the AMI. For more
	// information, see Understand AMI billing information (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-billing-info.html)
	// in the Amazon EC2 User Guide.
	PlatformDetails *string

	// Any product codes associated with the AMI.
	ProductCodes []ProductCode

	// Indicates whether the image has public launch permissions. The value is true if
	// this image has public launch permissions or false if it has only implicit and
	// explicit launch permissions.
	Public *bool

	// The RAM disk associated with the image, if any. Only applicable for machine
	// images.
	RamdiskId *string

	// The device name of the root device volume (for example, /dev/sda1 ).
	RootDeviceName *string

	// The type of root device used by the AMI. The AMI can use an Amazon EBS volume
	// or an instance store volume.
	RootDeviceType DeviceType

	// The ID of the instance that the AMI was created from if the AMI was created
	// using CreateImage (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html)
	// . This field only appears if the AMI was created using CreateImage.
	SourceInstanceId *string

	// Specifies whether enhanced networking with the Intel 82599 Virtual Function
	// interface is enabled.
	SriovNetSupport *string

	// The current state of the AMI. If the state is available , the image is
	// successfully registered and can be used to launch an instance.
	State ImageState

	// The reason for the state change.
	StateReason *StateReason

	// Any tags assigned to the image.
	Tags []Tag

	// If the image is configured for NitroTPM support, the value is v2.0 . For more
	// information, see NitroTPM (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html)
	// in the Amazon EC2 User Guide.
	TpmSupport TpmSupportValues

	// The operation of the Amazon EC2 instance and the billing code that is
	// associated with the AMI. usageOperation corresponds to the lineitem/Operation (https://docs.aws.amazon.com/cur/latest/userguide/Lineitem-columns.html#Lineitem-details-O-Operation)
	// column on your Amazon Web Services Cost and Usage Report and in the Amazon Web
	// Services Price List API (https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/price-changes.html)
	// . You can view these fields on the Instances or AMIs pages in the Amazon EC2
	// console, or in the responses that are returned by the DescribeImages (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeImages.html)
	// command in the Amazon EC2 API, or the describe-images (https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html)
	// command in the CLI.
	UsageOperation *string

	// The type of virtualization of the AMI.
	VirtualizationType VirtualizationType

	noSmithyDocumentSerde
}

// Describes the disk container object for an import image task.
type ImageDiskContainer struct {

	// The description of the disk image.
	Description *string

	// The block device mapping for the disk.
	DeviceName *string

	// The format of the disk image being imported. Valid values: OVA | VHD | VHDX |
	// VMDK | RAW
	Format *string

	// The ID of the EBS snapshot to be used for importing the snapshot.
	SnapshotId *string

	// The URL to the Amazon S3-based disk image being imported. The URL can either be
	// a https URL (https://..) or an Amazon S3 URL (s3://..)
	Url *string

	// The S3 bucket for the disk image.
	UserBucket *UserBucket

	noSmithyDocumentSerde
}

// Information about an AMI that is currently in the Recycle Bin.
type ImageRecycleBinInfo struct {

	// The description of the AMI.
	Description *string

	// The ID of the AMI.
	ImageId *string

	// The name of the AMI.
	Name *string

	// The date and time when the AMI entered the Recycle Bin.
	RecycleBinEnterTime *time.Time

	// The date and time when the AMI is to be permanently deleted from the Recycle
	// Bin.
	RecycleBinExitTime *time.Time

	noSmithyDocumentSerde
}

// The request information of license configurations.
type ImportImageLicenseConfigurationRequest struct {

	// The ARN of a license configuration.
	LicenseConfigurationArn *string

	noSmithyDocumentSerde
}

// The response information for license configurations.
type ImportImageLicenseConfigurationResponse struct {

	// The ARN of a license configuration.
	LicenseConfigurationArn *string

	noSmithyDocumentSerde
}

// Describes an import image task.
type ImportImageTask struct {

	// The architecture of the virtual machine. Valid values: i386 | x86_64 | arm64
	Architecture *string

	// The boot mode of the virtual machine.
	BootMode BootModeValues

	// A description of the import task.
	Description *string

	// Indicates whether the image is encrypted.
	Encrypted *bool

	// The target hypervisor for the import task. Valid values: xen
	Hypervisor *string

	// The ID of the Amazon Machine Image (AMI) of the imported virtual machine.
	ImageId *string

	// The ID of the import image task.
	ImportTaskId *string

	// The identifier for the KMS key that was used to create the encrypted image.
	KmsKeyId *string

	// The ARNs of the license configurations that are associated with the import
	// image task.
	LicenseSpecifications []ImportImageLicenseConfigurationResponse

	// The license type of the virtual machine.
	LicenseType *string

	// The description string for the import image task.
	Platform *string

	// The percentage of progress of the import image task.
	Progress *string

	// Information about the snapshots.
	SnapshotDetails []SnapshotDetail

	// A brief status for the import image task.
	Status *string

	// A descriptive status message for the import image task.
	StatusMessage *string

	// The tags for the import image task.
	Tags []Tag

	// The usage operation value.
	UsageOperation *string

	noSmithyDocumentSerde
}

// Describes the launch specification for VM import.
type ImportInstanceLaunchSpecification struct {

	// Reserved.
	AdditionalInfo *string

	// The architecture of the instance.
	Architecture ArchitectureValues

	// The security group IDs.
	GroupIds []string

	// The security group names.
	GroupNames []string

	// Indicates whether an instance stops or terminates when you initiate shutdown
	// from the instance (using the operating system command for system shutdown).
	InstanceInitiatedShutdownBehavior ShutdownBehavior

	// The instance type. For more information about the instance types that you can
	// import, see Instance Types (https://docs.aws.amazon.com/vm-import/latest/userguide/vmie_prereqs.html#vmimport-instance-types)
	// in the VM Import/Export User Guide.
	InstanceType InstanceType

	// Indicates whether monitoring is enabled.
	Monitoring *bool

	// The placement information for the instance.
	Placement *Placement

	// [EC2-VPC] An available IP address from the IP address range of the subnet.
	PrivateIpAddress *string

	// [EC2-VPC] The ID of the subnet in which to launch the instance.
	SubnetId *string

	// The Base64-encoded user data to make available to the instance.
	UserData *UserData

	noSmithyDocumentSerde
}

// Describes an import instance task.
type ImportInstanceTaskDetails struct {

	// A description of the task.
	Description *string

	// The ID of the instance.
	InstanceId *string

	// The instance operating system.
	Platform PlatformValues

	// The volumes.
	Volumes []ImportInstanceVolumeDetailItem

	noSmithyDocumentSerde
}

// Describes an import volume task.
type ImportInstanceVolumeDetailItem struct {

	// The Availability Zone where the resulting instance will reside.
	AvailabilityZone *string

	// The number of bytes converted so far.
	BytesConverted *int64

	// A description of the task.
	Description *string

	// The image.
	Image *DiskImageDescription

	// The status of the import of this particular disk image.
	Status *string

	// The status information or errors related to the disk image.
	StatusMessage *string

	// The volume.
	Volume *DiskImageVolumeDescription

	noSmithyDocumentSerde
}

// Describes an import snapshot task.
type ImportSnapshotTask struct {

	// A description of the import snapshot task.
	Description *string

	// The ID of the import snapshot task.
	ImportTaskId *string

	// Describes an import snapshot task.
	SnapshotTaskDetail *SnapshotTaskDetail

	// The tags for the import snapshot task.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes an import volume task.
type ImportVolumeTaskDetails struct {

	// The Availability Zone where the resulting volume will reside.
	AvailabilityZone *string

	// The number of bytes converted so far.
	BytesConverted *int64

	// The description you provided when starting the import volume task.
	Description *string

	// The image.
	Image *DiskImageDescription

	// The volume.
	Volume *DiskImageVolumeDescription

	noSmithyDocumentSerde
}

// Describes the Inference accelerators for the instance type.
type InferenceAcceleratorInfo struct {

	// Describes the Inference accelerators for the instance type.
	Accelerators []InferenceDeviceInfo

	// The total size of the memory for the inference accelerators for the instance
	// type, in MiB.
	TotalInferenceMemoryInMiB *int32

	noSmithyDocumentSerde
}

// Describes the Inference accelerators for the instance type.
type InferenceDeviceInfo struct {

	// The number of Inference accelerators for the instance type.
	Count *int32

	// The manufacturer of the Inference accelerator.
	Manufacturer *string

	// Describes the memory available to the inference accelerator.
	MemoryInfo *InferenceDeviceMemoryInfo

	// The name of the Inference accelerator.
	Name *string

	noSmithyDocumentSerde
}

// Describes the memory available to the inference accelerator.
type InferenceDeviceMemoryInfo struct {

	// The size of the memory available to the inference accelerator, in MiB.
	SizeInMiB *int32

	noSmithyDocumentSerde
}

// Describes an instance.
type Instance struct {

	// The AMI launch index, which can be used to find this instance in the launch
	// group.
	AmiLaunchIndex *int32

	// The architecture of the image.
	Architecture ArchitectureValues

	// Any block device mapping entries for the instance.
	BlockDeviceMappings []InstanceBlockDeviceMapping

	// The boot mode that was specified by the AMI. If the value is uefi-preferred ,
	// the AMI supports both UEFI and Legacy BIOS. The currentInstanceBootMode
	// parameter is the boot mode that is used to boot the instance at launch or start.
	// The operating system contained in the AMI must be configured to support the
	// specified boot mode. For more information, see Boot modes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html)
	// in the Amazon EC2 User Guide.
	BootMode BootModeValues

	// The ID of the Capacity Reservation.
	CapacityReservationId *string

	// Information about the Capacity Reservation targeting option.
	CapacityReservationSpecification *CapacityReservationSpecificationResponse

	// The idempotency token you provided when you launched the instance, if
	// applicable.
	ClientToken *string

	// The CPU options for the instance.
	CpuOptions *CpuOptions

	// The boot mode that is used to boot the instance at launch or start. For more
	// information, see Boot modes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html)
	// in the Amazon EC2 User Guide.
	CurrentInstanceBootMode InstanceBootModeValues

	// Indicates whether the instance is optimized for Amazon EBS I/O. This
	// optimization provides dedicated throughput to Amazon EBS and an optimized
	// configuration stack to provide optimal I/O performance. This optimization isn't
	// available with all instance types. Additional usage charges apply when using an
	// EBS Optimized instance.
	EbsOptimized *bool

	// Deprecated. Amazon Elastic Graphics reached end of life on January 8, 2024. For
	// workloads that require graphics acceleration, we recommend that you use Amazon
	// EC2 G4ad, G4dn, or G5 instances.
	ElasticGpuAssociations []ElasticGpuAssociation

	// The elastic inference accelerator associated with the instance.
	ElasticInferenceAcceleratorAssociations []ElasticInferenceAcceleratorAssociation

	// Specifies whether enhanced networking with ENA is enabled.
	EnaSupport *bool

	// Indicates whether the instance is enabled for Amazon Web Services Nitro
	// Enclaves.
	EnclaveOptions *EnclaveOptions

	// Indicates whether the instance is enabled for hibernation.
	HibernationOptions *HibernationOptions

	// The hypervisor type of the instance. The value xen is used for both Xen and
	// Nitro hypervisors.
	Hypervisor HypervisorType

	// The IAM instance profile associated with the instance, if applicable.
	IamInstanceProfile *IamInstanceProfile

	// The ID of the AMI used to launch the instance.
	ImageId *string

	// The ID of the instance.
	InstanceId *string

	// Indicates whether this is a Spot Instance or a Scheduled Instance.
	InstanceLifecycle InstanceLifecycleType

	// The instance type.
	InstanceType InstanceType

	// The IPv6 address assigned to the instance.
	Ipv6Address *string

	// The kernel associated with this instance, if applicable.
	KernelId *string

	// The name of the key pair, if this instance was launched with an associated key
	// pair.
	KeyName *string

	// The time the instance was launched.
	LaunchTime *time.Time

	// The license configurations for the instance.
	Licenses []LicenseConfiguration

	// Provides information on the recovery and maintenance options of your instance.
	MaintenanceOptions *InstanceMaintenanceOptions

	// The metadata options for the instance.
	MetadataOptions *InstanceMetadataOptionsResponse

	// The monitoring for the instance.
	Monitoring *Monitoring

	// The network interfaces for the instance.
	NetworkInterfaces []InstanceNetworkInterface

	// The Amazon Resource Name (ARN) of the Outpost.
	OutpostArn *string

	// The location where the instance launched, if applicable.
	Placement *Placement

	// The platform. This value is windows for Windows instances; otherwise, it is
	// empty.
	Platform PlatformValues

	// The platform details value for the instance. For more information, see AMI
	// billing information fields (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html)
	// in the Amazon EC2 User Guide.
	PlatformDetails *string

	// [IPv4 only] The private DNS hostname name assigned to the instance. This DNS
	// hostname can only be used inside the Amazon EC2 network. This name is not
	// available until the instance enters the running state. The Amazon-provided DNS
	// server resolves Amazon-provided private DNS hostnames if you've enabled DNS
	// resolution and DNS hostnames in your VPC. If you are not using the
	// Amazon-provided DNS server in your VPC, your custom domain name servers must
	// resolve the hostname as appropriate.
	PrivateDnsName *string

	// The options for the instance hostname.
	PrivateDnsNameOptions *PrivateDnsNameOptionsResponse

	// The private IPv4 address assigned to the instance.
	PrivateIpAddress *string

	// The product codes attached to this instance, if applicable.
	ProductCodes []ProductCode

	// [IPv4 only] The public DNS name assigned to the instance. This name is not
	// available until the instance enters the running state. This name is only
	// available if you've enabled DNS hostnames for your VPC.
	PublicDnsName *string

	// The public IPv4 address, or the Carrier IP address assigned to the instance, if
	// applicable. A Carrier IP address only applies to an instance launched in a
	// subnet associated with a Wavelength Zone.
	PublicIpAddress *string

	// The RAM disk associated with this instance, if applicable.
	RamdiskId *string

	// The device name of the root device volume (for example, /dev/sda1 ).
	RootDeviceName *string

	// The root device type used by the AMI. The AMI can use an EBS volume or an
	// instance store volume.
	RootDeviceType DeviceType

	// The security groups for the instance.
	SecurityGroups []GroupIdentifier

	// Indicates whether source/destination checking is enabled.
	SourceDestCheck *bool

	// If the request is a Spot Instance request, the ID of the request.
	SpotInstanceRequestId *string

	// Specifies whether enhanced networking with the Intel 82599 Virtual Function
	// interface is enabled.
	SriovNetSupport *string

	// The current state of the instance.
	State *InstanceState

	// The reason for the most recent state transition.
	StateReason *StateReason

	// The reason for the most recent state transition. This might be an empty string.
	StateTransitionReason *string

	// The ID of the subnet in which the instance is running.
	SubnetId *string

	// Any tags assigned to the instance.
	Tags []Tag

	// If the instance is configured for NitroTPM support, the value is v2.0 . For more
	// information, see NitroTPM (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html)
	// in the Amazon EC2 User Guide.
	TpmSupport *string

	// The usage operation value for the instance. For more information, see AMI
	// billing information fields (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/billing-info-fields.html)
	// in the Amazon EC2 User Guide.
	UsageOperation *string

	// The time that the usage operation was last updated.
	UsageOperationUpdateTime *time.Time

	// The virtualization type of the instance.
	VirtualizationType VirtualizationType

	// The ID of the VPC in which the instance is running.
	VpcId *string

	noSmithyDocumentSerde
}

// ENA Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
// technology to increase the maximum bandwidth used per stream and minimize tail
// latency of network traffic between EC2 instances. With ENA Express, you can
// communicate between two EC2 instances in the same subnet within the same
// account, or in different accounts. Both sending and receiving instances must
// have ENA Express enabled. To improve the reliability of network packet delivery,
// ENA Express reorders network packets on the receiving end by default. However,
// some UDP-based applications are designed to handle network packets that are out
// of order to reduce the overhead for packet delivery at the network layer. When
// ENA Express is enabled, you can specify whether UDP network traffic uses it.
type InstanceAttachmentEnaSrdSpecification struct {

	// Indicates whether ENA Express is enabled for the network interface.
	EnaSrdEnabled *bool

	// Configures ENA Express for UDP network traffic.
	EnaSrdUdpSpecification *InstanceAttachmentEnaSrdUdpSpecification

	noSmithyDocumentSerde
}

// ENA Express is compatible with both TCP and UDP transport protocols. When it's
// enabled, TCP traffic automatically uses it. However, some UDP-based applications
// are designed to handle network packets that are out of order, without a need for
// retransmission, such as live video broadcasting or other near-real-time
// applications. For UDP traffic, you can specify whether to use ENA Express, based
// on your application environment needs.
type InstanceAttachmentEnaSrdUdpSpecification struct {

	// Indicates whether UDP traffic to and from the instance uses ENA Express. To
	// specify this setting, you must first enable ENA Express.
	EnaSrdUdpEnabled *bool

	noSmithyDocumentSerde
}

// Describes a block device mapping.
type InstanceBlockDeviceMapping struct {

	// The device name (for example, /dev/sdh or xvdh ).
	DeviceName *string

	// Parameters used to automatically set up EBS volumes when the instance is
	// launched.
	Ebs *EbsInstanceBlockDevice

	noSmithyDocumentSerde
}

// Describes a block device mapping entry.
type InstanceBlockDeviceMappingSpecification struct {

	// The device name (for example, /dev/sdh or xvdh ).
	DeviceName *string

	// Parameters used to automatically set up EBS volumes when the instance is
	// launched.
	Ebs *EbsInstanceBlockDeviceSpecification

	// suppress the specified device included in the block device mapping.
	NoDevice *string

	// The virtual device name.
	VirtualName *string

	noSmithyDocumentSerde
}

// Information about the number of instances that can be launched onto the
// Dedicated Host.
type InstanceCapacity struct {

	// The number of instances that can be launched onto the Dedicated Host based on
	// the host's available capacity.
	AvailableCapacity *int32

	// The instance type supported by the Dedicated Host.
	InstanceType *string

	// The total number of instances that can be launched onto the Dedicated Host if
	// there are no instances running on it.
	TotalCapacity *int32

	noSmithyDocumentSerde
}

// Describes a Reserved Instance listing state.
type InstanceCount struct {

	// The number of listed Reserved Instances in the state specified by the state .
	InstanceCount *int32

	// The states of the listed Reserved Instances.
	State ListingState

	noSmithyDocumentSerde
}

// Describes the credit option for CPU usage of a burstable performance instance.
type InstanceCreditSpecification struct {

	// The credit option for CPU usage of the instance. Valid values: standard |
	// unlimited
	CpuCredits *string

	// The ID of the instance.
	InstanceId *string

	noSmithyDocumentSerde
}

// Describes the credit option for CPU usage of a burstable performance instance.
type InstanceCreditSpecificationRequest struct {

	// The ID of the instance.
	//
	// This member is required.
	InstanceId *string

	// The credit option for CPU usage of the instance. Valid values: standard |
	// unlimited T3 instances with host tenancy do not support the unlimited CPU
	// credit option.
	CpuCredits *string

	noSmithyDocumentSerde
}

// The event window.
type InstanceEventWindow struct {

	// One or more targets associated with the event window.
	AssociationTarget *InstanceEventWindowAssociationTarget

	// The cron expression defined for the event window.
	CronExpression *string

	// The ID of the event window.
	InstanceEventWindowId *string

	// The name of the event window.
	Name *string

	// The current state of the event window.
	State InstanceEventWindowState

	// The instance tags associated with the event window.
	Tags []Tag

	// One or more time ranges defined for the event window.
	TimeRanges []InstanceEventWindowTimeRange

	noSmithyDocumentSerde
}

// One or more targets associated with the specified event window. Only one type
// of target (instance ID, instance tag, or Dedicated Host ID) can be associated
// with an event window.
type InstanceEventWindowAssociationRequest struct {

	// The IDs of the Dedicated Hosts to associate with the event window.
	DedicatedHostIds []string

	// The IDs of the instances to associate with the event window. If the instance is
	// on a Dedicated Host, you can't specify the Instance ID parameter; you must use
	// the Dedicated Host ID parameter.
	InstanceIds []string

	// The instance tags to associate with the event window. Any instances associated
	// with the tags will be associated with the event window.
	InstanceTags []Tag

	noSmithyDocumentSerde
}

// One or more targets associated with the event window.
type InstanceEventWindowAssociationTarget struct {

	// The IDs of the Dedicated Hosts associated with the event window.
	DedicatedHostIds []string

	// The IDs of the instances associated with the event window.
	InstanceIds []string

	// The instance tags associated with the event window. Any instances associated
	// with the tags will be associated with the event window.
	Tags []Tag

	noSmithyDocumentSerde
}

// The targets to disassociate from the specified event window.
type InstanceEventWindowDisassociationRequest struct {

	// The IDs of the Dedicated Hosts to disassociate from the event window.
	DedicatedHostIds []string

	// The IDs of the instances to disassociate from the event window.
	InstanceIds []string

	// The instance tags to disassociate from the event window. Any instances
	// associated with the tags will be disassociated from the event window.
	InstanceTags []Tag

	noSmithyDocumentSerde
}

// The state of the event window.
type InstanceEventWindowStateChange struct {

	// The ID of the event window.
	InstanceEventWindowId *string

	// The current state of the event window.
	State InstanceEventWindowState

	noSmithyDocumentSerde
}

// The start day and time and the end day and time of the time range, in UTC.
type InstanceEventWindowTimeRange struct {

	// The hour when the time range ends.
	EndHour *int32

	// The day on which the time range ends.
	EndWeekDay WeekDay

	// The hour when the time range begins.
	StartHour *int32

	// The day on which the time range begins.
	StartWeekDay WeekDay

	noSmithyDocumentSerde
}

// The start day and time and the end day and time of the time range, in UTC.
type InstanceEventWindowTimeRangeRequest struct {

	// The hour when the time range ends.
	EndHour *int32

	// The day on which the time range ends.
	EndWeekDay WeekDay

	// The hour when the time range begins.
	StartHour *int32

	// The day on which the time range begins.
	StartWeekDay WeekDay

	noSmithyDocumentSerde
}

// Describes an instance to export.
type InstanceExportDetails struct {

	// The ID of the resource being exported.
	InstanceId *string

	// The target virtualization environment.
	TargetEnvironment ExportEnvironment

	noSmithyDocumentSerde
}

// Describes the default credit option for CPU usage of a burstable performance
// instance family.
type InstanceFamilyCreditSpecification struct {

	// The default credit option for CPU usage of the instance family. Valid values
	// are standard and unlimited .
	CpuCredits *string

	// The instance family.
	InstanceFamily UnlimitedSupportedInstanceFamily

	noSmithyDocumentSerde
}

// Information about an IPv4 prefix.
type InstanceIpv4Prefix struct {

	// One or more IPv4 prefixes assigned to the network interface.
	Ipv4Prefix *string

	noSmithyDocumentSerde
}

// Describes an IPv6 address.
type InstanceIpv6Address struct {

	// The IPv6 address.
	Ipv6Address *string

	// Determines if an IPv6 address associated with a network interface is the
	// primary IPv6 address. When you enable an IPv6 GUA address to be a primary IPv6,
	// the first IPv6 GUA will be made the primary IPv6 address until the instance is
	// terminated or the network interface is detached. For more information, see
	// RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// .
	IsPrimaryIpv6 *bool

	noSmithyDocumentSerde
}

// Describes an IPv6 address.
type InstanceIpv6AddressRequest struct {

	// The IPv6 address.
	Ipv6Address *string

	noSmithyDocumentSerde
}

// Information about an IPv6 prefix.
type InstanceIpv6Prefix struct {

	// One or more IPv6 prefixes assigned to the network interface.
	Ipv6Prefix *string

	noSmithyDocumentSerde
}

// The maintenance options for the instance.
type InstanceMaintenanceOptions struct {

	// Provides information on the current automatic recovery behavior of your
	// instance.
	AutoRecovery InstanceAutoRecoveryState

	noSmithyDocumentSerde
}

// The maintenance options for the instance.
type InstanceMaintenanceOptionsRequest struct {

	// Disables the automatic recovery behavior of your instance or sets it to
	// default. For more information, see Simplified automatic recovery (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery)
	// .
	AutoRecovery InstanceAutoRecoveryState

	noSmithyDocumentSerde
}

// Describes the market (purchasing) option for the instances.
type InstanceMarketOptionsRequest struct {

	// The market type.
	MarketType MarketType

	// The options for Spot Instances.
	SpotOptions *SpotMarketOptions

	noSmithyDocumentSerde
}

// The metadata options for the instance.
type InstanceMetadataOptionsRequest struct {

	// Enables or disables the HTTP metadata endpoint on your instances. If you
	// specify a value of disabled , you cannot access your instance metadata. Default:
	// enabled
	HttpEndpoint InstanceMetadataEndpointState

	// Enables or disables the IPv6 endpoint for the instance metadata service.
	HttpProtocolIpv6 InstanceMetadataProtocolState

	// The desired HTTP PUT response hop limit for instance metadata requests. The
	// larger the number, the further instance metadata requests can travel. Default: 1
	// Possible values: Integers from 1 to 64
	HttpPutResponseHopLimit *int32

	// Indicates whether IMDSv2 is required.
	//   - optional - IMDSv2 is optional. You can choose whether to send a session
	//   token in your instance metadata retrieval requests. If you retrieve IAM role
	//   credentials without a session token, you receive the IMDSv1 role credentials. If
	//   you retrieve IAM role credentials using a valid session token, you receive the
	//   IMDSv2 role credentials.
	//   - required - IMDSv2 is required. You must send a session token in your
	//   instance metadata retrieval requests. With this option, retrieving the IAM role
	//   credentials always returns IMDSv2 credentials; IMDSv1 credentials are not
	//   available.
	// Default: If the value of ImdsSupport for the Amazon Machine Image (AMI) for
	// your instance is v2.0 , the default is required .
	HttpTokens HttpTokensState

	// Set to enabled to allow access to instance tags from the instance metadata. Set
	// to disabled to turn off access to instance tags from the instance metadata. For
	// more information, see Work with instance tags using the instance metadata (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS)
	// . Default: disabled
	InstanceMetadataTags InstanceMetadataTagsState

	noSmithyDocumentSerde
}

// The metadata options for the instance.
type InstanceMetadataOptionsResponse struct {

	// Indicates whether the HTTP metadata endpoint on your instances is enabled or
	// disabled. If the value is disabled , you cannot access your instance metadata.
	HttpEndpoint InstanceMetadataEndpointState

	// Indicates whether the IPv6 endpoint for the instance metadata service is
	// enabled or disabled.
	HttpProtocolIpv6 InstanceMetadataProtocolState

	// The desired HTTP PUT response hop limit for instance metadata requests. The
	// larger the number, the further instance metadata requests can travel. Default: 1
	// Possible values: Integers from 1 to 64
	HttpPutResponseHopLimit *int32

	// Indicates whether IMDSv2 is required.
	//   - optional - IMDSv2 is optional. You can choose whether to send a session
	//   token in your instance metadata retrieval requests. If you retrieve IAM role
	//   credentials without a session token, you receive the IMDSv1 role credentials. If
	//   you retrieve IAM role credentials using a valid session token, you receive the
	//   IMDSv2 role credentials.
	//   - required - IMDSv2 is required. You must send a session token in your
	//   instance metadata retrieval requests. With this option, retrieving the IAM role
	//   credentials always returns IMDSv2 credentials; IMDSv1 credentials are not
	//   available.
	HttpTokens HttpTokensState

	// Indicates whether access to instance tags from the instance metadata is enabled
	// or disabled. For more information, see Work with instance tags using the
	// instance metadata (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS)
	// .
	InstanceMetadataTags InstanceMetadataTagsState

	// The state of the metadata option changes. pending - The metadata options are
	// being updated and the instance is not ready to process metadata traffic with the
	// new selection. applied - The metadata options have been successfully applied on
	// the instance.
	State InstanceMetadataOptionsState

	noSmithyDocumentSerde
}

// Describes the monitoring of an instance.
type InstanceMonitoring struct {

	// The ID of the instance.
	InstanceId *string

	// The monitoring for the instance.
	Monitoring *Monitoring

	noSmithyDocumentSerde
}

// Describes a network interface.
type InstanceNetworkInterface struct {

	// The association information for an Elastic IPv4 associated with the network
	// interface.
	Association *InstanceNetworkInterfaceAssociation

	// The network interface attachment.
	Attachment *InstanceNetworkInterfaceAttachment

	// A security group connection tracking configuration that enables you to set the
	// timeout for connection tracking on an Elastic network interface. For more
	// information, see Connection tracking timeouts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts)
	// in the Amazon Elastic Compute Cloud User Guide.
	ConnectionTrackingConfiguration *ConnectionTrackingSpecificationResponse

	// The description.
	Description *string

	// The security groups.
	Groups []GroupIdentifier

	// The type of network interface. Valid values: interface | efa | trunk
	InterfaceType *string

	// The IPv4 delegated prefixes that are assigned to the network interface.
	Ipv4Prefixes []InstanceIpv4Prefix

	// The IPv6 addresses associated with the network interface.
	Ipv6Addresses []InstanceIpv6Address

	// The IPv6 delegated prefixes that are assigned to the network interface.
	Ipv6Prefixes []InstanceIpv6Prefix

	// The MAC address.
	MacAddress *string

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The ID of the Amazon Web Services account that created the network interface.
	OwnerId *string

	// The private DNS name.
	PrivateDnsName *string

	// The IPv4 address of the network interface within the subnet.
	PrivateIpAddress *string

	// The private IPv4 addresses associated with the network interface.
	PrivateIpAddresses []InstancePrivateIpAddress

	// Indicates whether source/destination checking is enabled.
	SourceDestCheck *bool

	// The status of the network interface.
	Status NetworkInterfaceStatus

	// The ID of the subnet.
	SubnetId *string

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes association information for an Elastic IP address (IPv4).
type InstanceNetworkInterfaceAssociation struct {

	// The carrier IP address associated with the network interface.
	CarrierIp *string

	// The customer-owned IP address associated with the network interface.
	CustomerOwnedIp *string

	// The ID of the owner of the Elastic IP address.
	IpOwnerId *string

	// The public DNS name.
	PublicDnsName *string

	// The public IP address or Elastic IP address bound to the network interface.
	PublicIp *string

	noSmithyDocumentSerde
}

// Describes a network interface attachment.
type InstanceNetworkInterfaceAttachment struct {

	// The time stamp when the attachment initiated.
	AttachTime *time.Time

	// The ID of the network interface attachment.
	AttachmentId *string

	// Indicates whether the network interface is deleted when the instance is
	// terminated.
	DeleteOnTermination *bool

	// The index of the device on the instance for the network interface attachment.
	DeviceIndex *int32

	// Contains the ENA Express settings for the network interface that's attached to
	// the instance.
	EnaSrdSpecification *InstanceAttachmentEnaSrdSpecification

	// The index of the network card.
	NetworkCardIndex *int32

	// The attachment state.
	Status AttachmentStatus

	noSmithyDocumentSerde
}

// Describes a network interface.
type InstanceNetworkInterfaceSpecification struct {

	// Indicates whether to assign a carrier IP address to the network interface. You
	// can only assign a carrier IP address to a network interface that is in a subnet
	// in a Wavelength Zone. For more information about carrier IP addresses, see
	// Carrier IP address (https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip)
	// in the Amazon Web Services Wavelength Developer Guide.
	AssociateCarrierIpAddress *bool

	// Indicates whether to assign a public IPv4 address to an instance you launch in
	// a VPC. The public IP address can only be assigned to a network interface for
	// eth0, and can only be assigned to a new network interface, not an existing one.
	// You cannot specify more than one network interface in the request. If launching
	// into a default subnet, the default value is true . Starting on February 1, 2024,
	// Amazon Web Services will charge for all public IPv4 addresses, including public
	// IPv4 addresses associated with running instances and Elastic IP addresses. For
	// more information, see the Public IPv4 Address tab on the Amazon VPC pricing page (http://aws.amazon.com/vpc/pricing/)
	// .
	AssociatePublicIpAddress *bool

	// A security group connection tracking specification that enables you to set the
	// timeout for connection tracking on an Elastic network interface. For more
	// information, see Connection tracking timeouts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts)
	// in the Amazon Elastic Compute Cloud User Guide.
	ConnectionTrackingSpecification *ConnectionTrackingSpecificationRequest

	// If set to true , the interface is deleted when the instance is terminated. You
	// can specify true only if creating a new network interface when launching an
	// instance.
	DeleteOnTermination *bool

	// The description of the network interface. Applies only if creating a network
	// interface when launching an instance.
	Description *string

	// The position of the network interface in the attachment order. A primary
	// network interface has a device index of 0. If you specify a network interface
	// when launching an instance, you must specify the device index.
	DeviceIndex *int32

	// Specifies the ENA Express settings for the network interface that's attached to
	// the instance.
	EnaSrdSpecification *EnaSrdSpecificationRequest

	// The IDs of the security groups for the network interface. Applies only if
	// creating a network interface when launching an instance.
	Groups []string

	// The type of network interface. Valid values: interface | efa
	InterfaceType *string

	// The number of IPv4 delegated prefixes to be automatically assigned to the
	// network interface. You cannot use this option if you use the Ipv4Prefix option.
	Ipv4PrefixCount *int32

	// The IPv4 delegated prefixes to be assigned to the network interface. You cannot
	// use this option if you use the Ipv4PrefixCount option.
	Ipv4Prefixes []Ipv4PrefixSpecificationRequest

	// A number of IPv6 addresses to assign to the network interface. Amazon EC2
	// chooses the IPv6 addresses from the range of the subnet. You cannot specify this
	// option and the option to assign specific IPv6 addresses in the same request. You
	// can specify this option if you've specified a minimum number of instances to
	// launch.
	Ipv6AddressCount *int32

	// The IPv6 addresses to assign to the network interface. You cannot specify this
	// option and the option to assign a number of IPv6 addresses in the same request.
	// You cannot specify this option if you've specified a minimum number of instances
	// to launch.
	Ipv6Addresses []InstanceIpv6Address

	// The number of IPv6 delegated prefixes to be automatically assigned to the
	// network interface. You cannot use this option if you use the Ipv6Prefix option.
	Ipv6PrefixCount *int32

	// The IPv6 delegated prefixes to be assigned to the network interface. You cannot
	// use this option if you use the Ipv6PrefixCount option.
	Ipv6Prefixes []Ipv6PrefixSpecificationRequest

	// The index of the network card. Some instance types support multiple network
	// cards. The primary network interface must be assigned to network card index 0.
	// The default is network card index 0. If you are using RequestSpotInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RequestSpotInstances.html)
	// to create Spot Instances, omit this parameter because you can’t specify the
	// network card index when using this API. To specify the network card index, use
	// RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// .
	NetworkCardIndex *int32

	// The ID of the network interface. If you are creating a Spot Fleet, omit this
	// parameter because you can’t specify a network interface ID in a launch
	// specification.
	NetworkInterfaceId *string

	// The primary IPv6 address of the network interface. When you enable an IPv6 GUA
	// address to be a primary IPv6, the first IPv6 GUA will be made the primary IPv6
	// address until the instance is terminated or the network interface is detached.
	// For more information about primary IPv6 addresses, see RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// .
	PrimaryIpv6 *bool

	// The private IPv4 address of the network interface. Applies only if creating a
	// network interface when launching an instance. You cannot specify this option if
	// you're launching more than one instance in a RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// request.
	PrivateIpAddress *string

	// The private IPv4 addresses to assign to the network interface. Only one private
	// IPv4 address can be designated as primary. You cannot specify this option if
	// you're launching more than one instance in a RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// request.
	PrivateIpAddresses []PrivateIpAddressSpecification

	// The number of secondary private IPv4 addresses. You can't specify this option
	// and specify more than one private IP address using the private IP addresses
	// option. You cannot specify this option if you're launching more than one
	// instance in a RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// request.
	SecondaryPrivateIpAddressCount *int32

	// The ID of the subnet associated with the network interface. Applies only if
	// creating a network interface when launching an instance.
	SubnetId *string

	noSmithyDocumentSerde
}

// Describes a private IPv4 address.
type InstancePrivateIpAddress struct {

	// The association information for an Elastic IP address for the network interface.
	Association *InstanceNetworkInterfaceAssociation

	// Indicates whether this IPv4 address is the primary private IP address of the
	// network interface.
	Primary *bool

	// The private IPv4 DNS name.
	PrivateDnsName *string

	// The private IPv4 address of the network interface.
	PrivateIpAddress *string

	noSmithyDocumentSerde
}

// The attributes for the instance types. When you specify instance attributes,
// Amazon EC2 will identify instance types with these attributes. You must specify
// VCpuCount and MemoryMiB . All other attributes are optional. Any unspecified
// optional attribute is set to its default. When you specify multiple attributes,
// you get instance types that satisfy all of the specified attributes. If you
// specify multiple values for an attribute, you get instance types that satisfy
// any of the specified values. To limit the list of instance types from which
// Amazon EC2 can identify matching instance types, you can use one of the
// following parameters, but not both in the same request:
//   - AllowedInstanceTypes - The instance types to include in the list. All other
//     instance types are ignored, even if they match your specified attributes.
//   - ExcludedInstanceTypes - The instance types to exclude from the list, even if
//     they match your specified attributes.
//
// If you specify InstanceRequirements , you can't specify InstanceType .
// Attribute-based instance type selection is only supported when using Auto
// Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If you plan to
// use the launch template in the launch instance wizard (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)
// or with the RunInstances API (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
// , you can't specify InstanceRequirements . For more information, see Create a
// mixed instances group using attribute-based instance type selection (https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-mixed-instances-group-attribute-based-instance-type-selection.html)
// in the Amazon EC2 Auto Scaling User Guide, and also Attribute-based instance
// type selection for EC2 Fleet (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html)
// , Attribute-based instance type selection for Spot Fleet (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html)
// , and Spot placement score (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html)
// in the Amazon EC2 User Guide.
type InstanceRequirements struct {

	// The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon Web
	// Services Inferentia chips) on an instance. To exclude accelerator-enabled
	// instance types, set Max to 0 . Default: No minimum or maximum limits
	AcceleratorCount *AcceleratorCount

	// Indicates whether instance types must have accelerators by specific
	// manufacturers.
	//   - For instance types with Amazon Web Services devices, specify
	//   amazon-web-services .
	//   - For instance types with AMD devices, specify amd .
	//   - For instance types with Habana devices, specify habana .
	//   - For instance types with NVIDIA devices, specify nvidia .
	//   - For instance types with Xilinx devices, specify xilinx .
	// Default: Any manufacturer
	AcceleratorManufacturers []AcceleratorManufacturer

	// The accelerators that must be on the instance type.
	//   - For instance types with NVIDIA A10G GPUs, specify a10g .
	//   - For instance types with NVIDIA A100 GPUs, specify a100 .
	//   - For instance types with NVIDIA H100 GPUs, specify h100 .
	//   - For instance types with Amazon Web Services Inferentia chips, specify
	//   inferentia .
	//   - For instance types with NVIDIA GRID K520 GPUs, specify k520 .
	//   - For instance types with NVIDIA K80 GPUs, specify k80 .
	//   - For instance types with NVIDIA M60 GPUs, specify m60 .
	//   - For instance types with AMD Radeon Pro V520 GPUs, specify radeon-pro-v520 .
	//   - For instance types with NVIDIA T4 GPUs, specify t4 .
	//   - For instance types with NVIDIA T4G GPUs, specify t4g .
	//   - For instance types with Xilinx VU9P FPGAs, specify vu9p .
	//   - For instance types with NVIDIA V100 GPUs, specify v100 .
	// Default: Any accelerator
	AcceleratorNames []AcceleratorName

	// The minimum and maximum amount of total accelerator memory, in MiB. Default: No
	// minimum or maximum limits
	AcceleratorTotalMemoryMiB *AcceleratorTotalMemoryMiB

	// The accelerator types that must be on the instance type.
	//   - For instance types with GPU accelerators, specify gpu .
	//   - For instance types with FPGA accelerators, specify fpga .
	//   - For instance types with inference accelerators, specify inference .
	// Default: Any accelerator type
	AcceleratorTypes []AcceleratorType

	// The instance types to apply your specified attributes against. All other
	// instance types are ignored, even if they match your specified attributes. You
	// can use strings with one or more wild cards, represented by an asterisk ( * ),
	// to allow an instance type, size, or generation. The following are examples:
	// m5.8xlarge , c5*.* , m5a.* , r* , *3* . For example, if you specify c5* ,Amazon
	// EC2 will allow the entire C5 instance family, which includes all C5a and C5n
	// instance types. If you specify m5a.* , Amazon EC2 will allow all the M5a
	// instance types, but not the M5n instance types. If you specify
	// AllowedInstanceTypes , you can't specify ExcludedInstanceTypes . Default: All
	// instance types
	AllowedInstanceTypes []string

	// Indicates whether bare metal instance types must be included, excluded, or
	// required.
	//   - To include bare metal instance types, specify included .
	//   - To require only bare metal instance types, specify required .
	//   - To exclude bare metal instance types, specify excluded .
	// Default: excluded
	BareMetal BareMetal

	// The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For more
	// information, see Amazon EBS–optimized instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html)
	// in the Amazon EC2 User Guide. Default: No minimum or maximum limits
	BaselineEbsBandwidthMbps *BaselineEbsBandwidthMbps

	// Indicates whether burstable performance T instance types are included,
	// excluded, or required. For more information, see Burstable performance instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)
	// .
	//   - To include burstable performance instance types, specify included .
	//   - To require only burstable performance instance types, specify required .
	//   - To exclude burstable performance instance types, specify excluded .
	// Default: excluded
	BurstablePerformance BurstablePerformance

	// The CPU manufacturers to include.
	//   - For instance types with Intel CPUs, specify intel .
	//   - For instance types with AMD CPUs, specify amd .
	//   - For instance types with Amazon Web Services CPUs, specify
	//   amazon-web-services .
	// Don't confuse the CPU manufacturer with the CPU architecture. Instances will be
	// launched with a compatible CPU architecture based on the Amazon Machine Image
	// (AMI) that you specify in your launch template. Default: Any manufacturer
	CpuManufacturers []CpuManufacturer

	// The instance types to exclude. You can use strings with one or more wild cards,
	// represented by an asterisk ( * ), to exclude an instance type, size, or
	// generation. The following are examples: m5.8xlarge , c5*.* , m5a.* , r* , *3* .
	// For example, if you specify c5* ,Amazon EC2 will exclude the entire C5 instance
	// family, which includes all C5a and C5n instance types. If you specify m5a.* ,
	// Amazon EC2 will exclude all the M5a instance types, but not the M5n instance
	// types. If you specify ExcludedInstanceTypes , you can't specify
	// AllowedInstanceTypes . Default: No excluded instance types
	ExcludedInstanceTypes []string

	// Indicates whether current or previous generation instance types are included.
	// The current generation instance types are recommended for use. Current
	// generation instance types are typically the latest two to three generations in
	// each instance family. For more information, see Instance types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)
	// in the Amazon EC2 User Guide. For current generation instance types, specify
	// current . For previous generation instance types, specify previous . Default:
	// Current and previous generation instance types
	InstanceGenerations []InstanceGeneration

	// Indicates whether instance types with instance store volumes are included,
	// excluded, or required. For more information, Amazon EC2 instance store (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)
	// in the Amazon EC2 User Guide.
	//   - To include instance types with instance store volumes, specify included .
	//   - To require only instance types with instance store volumes, specify required
	//   .
	//   - To exclude instance types with instance store volumes, specify excluded .
	// Default: included
	LocalStorage LocalStorage

	// The type of local storage that is required.
	//   - For instance types with hard disk drive (HDD) storage, specify hdd .
	//   - For instance types with solid state drive (SSD) storage, specify ssd .
	// Default: hdd and ssd
	LocalStorageTypes []LocalStorageType

	// [Price protection] The price protection threshold for Spot Instances, as a
	// percentage of an identified On-Demand price. The identified On-Demand price is
	// the price of the lowest priced current generation C, M, or R instance type with
	// your specified attributes. If no current generation C, M, or R instance type
	// matches your attributes, then the identified price is from the lowest priced
	// current generation instance types, and failing that, from the lowest priced
	// previous generation instance types that match your attributes. When Amazon EC2
	// selects instance types with your attributes, it will exclude instance types
	// whose price exceeds your specified threshold. The parameter accepts an integer,
	// which Amazon EC2 interprets as a percentage. To indicate no price protection
	// threshold, specify a high value, such as 999999 . If you set DesiredCapacityType
	// to vcpu or memory-mib , the price protection threshold is based on the per vCPU
	// or per memory price instead of the per instance price. Only one of
	// SpotMaxPricePercentageOverLowestPrice or
	// MaxSpotPriceAsPercentageOfOptimalOnDemandPrice can be specified. If you don't
	// specify either, then SpotMaxPricePercentageOverLowestPrice is used and the
	// value for that parameter defaults to 100 .
	MaxSpotPriceAsPercentageOfOptimalOnDemandPrice *int32

	// The minimum and maximum amount of memory per vCPU, in GiB. Default: No minimum
	// or maximum limits
	MemoryGiBPerVCpu *MemoryGiBPerVCpu

	// The minimum and maximum amount of memory, in MiB.
	MemoryMiB *MemoryMiB

	// The minimum and maximum amount of network bandwidth, in gigabits per second
	// (Gbps). Default: No minimum or maximum limits
	NetworkBandwidthGbps *NetworkBandwidthGbps

	// The minimum and maximum number of network interfaces. Default: No minimum or
	// maximum limits
	NetworkInterfaceCount *NetworkInterfaceCount

	// [Price protection] The price protection threshold for On-Demand Instances, as a
	// percentage higher than an identified On-Demand price. The identified On-Demand
	// price is the price of the lowest priced current generation C, M, or R instance
	// type with your specified attributes. When Amazon EC2 selects instance types with
	// your attributes, it will exclude instance types whose price exceeds your
	// specified threshold. The parameter accepts an integer, which Amazon EC2
	// interprets as a percentage. To turn off price protection, specify a high value,
	// such as 999999 . This parameter is not supported for GetSpotPlacementScores (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html)
	// and GetInstanceTypesFromInstanceRequirements (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html)
	// . If you set TargetCapacityUnitType to vcpu or memory-mib , the price protection
	// threshold is applied based on the per-vCPU or per-memory price instead of the
	// per-instance price. Default: 20
	OnDemandMaxPricePercentageOverLowestPrice *int32

	// Indicates whether instance types must support hibernation for On-Demand
	// Instances. This parameter is not supported for GetSpotPlacementScores (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html)
	// . Default: false
	RequireHibernateSupport *bool

	// [Price protection] The price protection threshold for Spot Instances, as a
	// percentage higher than an identified Spot price. The identified Spot price is
	// the Spot price of the lowest priced current generation C, M, or R instance type
	// with your specified attributes. If no current generation C, M, or R instance
	// type matches your attributes, then the identified Spot price is from the lowest
	// priced current generation instance types, and failing that, from the lowest
	// priced previous generation instance types that match your attributes. When
	// Amazon EC2 selects instance types with your attributes, it will exclude instance
	// types whose Spot price exceeds your specified threshold. The parameter accepts
	// an integer, which Amazon EC2 interprets as a percentage. To indicate no price
	// protection threshold, specify a high value, such as 999999 . If you set
	// TargetCapacityUnitType to vcpu or memory-mib , the price protection threshold is
	// applied based on the per-vCPU or per-memory price instead of the per-instance
	// price. This parameter is not supported for GetSpotPlacementScores (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html)
	// and GetInstanceTypesFromInstanceRequirements (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html)
	// . Only one of SpotMaxPricePercentageOverLowestPrice or
	// MaxSpotPriceAsPercentageOfOptimalOnDemandPrice can be specified. If you don't
	// specify either, then SpotMaxPricePercentageOverLowestPrice is used and the
	// value for that parameter defaults to 100 . Default: 100
	SpotMaxPricePercentageOverLowestPrice *int32

	// The minimum and maximum amount of total local storage, in GB. Default: No
	// minimum or maximum limits
	TotalLocalStorageGB *TotalLocalStorageGB

	// The minimum and maximum number of vCPUs.
	VCpuCount *VCpuCountRange

	noSmithyDocumentSerde
}

// The attributes for the instance types. When you specify instance attributes,
// Amazon EC2 will identify instance types with these attributes. You must specify
// VCpuCount and MemoryMiB . All other attributes are optional. Any unspecified
// optional attribute is set to its default. When you specify multiple attributes,
// you get instance types that satisfy all of the specified attributes. If you
// specify multiple values for an attribute, you get instance types that satisfy
// any of the specified values. To limit the list of instance types from which
// Amazon EC2 can identify matching instance types, you can use one of the
// following parameters, but not both in the same request:
//   - AllowedInstanceTypes - The instance types to include in the list. All other
//     instance types are ignored, even if they match your specified attributes.
//   - ExcludedInstanceTypes - The instance types to exclude from the list, even if
//     they match your specified attributes.
//
// If you specify InstanceRequirements , you can't specify InstanceType .
// Attribute-based instance type selection is only supported when using Auto
// Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If you plan to
// use the launch template in the launch instance wizard (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)
// , or with the RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
// API or AWS::EC2::Instance (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html)
// Amazon Web Services CloudFormation resource, you can't specify
// InstanceRequirements . For more information, see Attribute-based instance type
// selection for EC2 Fleet (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html)
// , Attribute-based instance type selection for Spot Fleet (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html)
// , and Spot placement score (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html)
// in the Amazon EC2 User Guide.
type InstanceRequirementsRequest struct {

	// The minimum and maximum amount of memory, in MiB.
	//
	// This member is required.
	MemoryMiB *MemoryMiBRequest

	// The minimum and maximum number of vCPUs.
	//
	// This member is required.
	VCpuCount *VCpuCountRangeRequest

	// The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon Web
	// Services Inferentia chips) on an instance. To exclude accelerator-enabled
	// instance types, set Max to 0 . Default: No minimum or maximum limits
	AcceleratorCount *AcceleratorCountRequest

	// Indicates whether instance types must have accelerators by specific
	// manufacturers.
	//   - For instance types with Amazon Web Services devices, specify
	//   amazon-web-services .
	//   - For instance types with AMD devices, specify amd .
	//   - For instance types with Habana devices, specify habana .
	//   - For instance types with NVIDIA devices, specify nvidia .
	//   - For instance types with Xilinx devices, specify xilinx .
	// Default: Any manufacturer
	AcceleratorManufacturers []AcceleratorManufacturer

	// The accelerators that must be on the instance type.
	//   - For instance types with NVIDIA A10G GPUs, specify a10g .
	//   - For instance types with NVIDIA A100 GPUs, specify a100 .
	//   - For instance types with NVIDIA H100 GPUs, specify h100 .
	//   - For instance types with Amazon Web Services Inferentia chips, specify
	//   inferentia .
	//   - For instance types with NVIDIA GRID K520 GPUs, specify k520 .
	//   - For instance types with NVIDIA K80 GPUs, specify k80 .
	//   - For instance types with NVIDIA M60 GPUs, specify m60 .
	//   - For instance types with AMD Radeon Pro V520 GPUs, specify radeon-pro-v520 .
	//   - For instance types with NVIDIA T4 GPUs, specify t4 .
	//   - For instance types with NVIDIA T4G GPUs, specify t4g .
	//   - For instance types with Xilinx VU9P FPGAs, specify vu9p .
	//   - For instance types with NVIDIA V100 GPUs, specify v100 .
	// Default: Any accelerator
	AcceleratorNames []AcceleratorName

	// The minimum and maximum amount of total accelerator memory, in MiB. Default: No
	// minimum or maximum limits
	AcceleratorTotalMemoryMiB *AcceleratorTotalMemoryMiBRequest

	// The accelerator types that must be on the instance type.
	//   - To include instance types with GPU hardware, specify gpu .
	//   - To include instance types with FPGA hardware, specify fpga .
	//   - To include instance types with inference hardware, specify inference .
	// Default: Any accelerator type
	AcceleratorTypes []AcceleratorType

	// The instance types to apply your specified attributes against. All other
	// instance types are ignored, even if they match your specified attributes. You
	// can use strings with one or more wild cards, represented by an asterisk ( * ),
	// to allow an instance type, size, or generation. The following are examples:
	// m5.8xlarge , c5*.* , m5a.* , r* , *3* . For example, if you specify c5* ,Amazon
	// EC2 will allow the entire C5 instance family, which includes all C5a and C5n
	// instance types. If you specify m5a.* , Amazon EC2 will allow all the M5a
	// instance types, but not the M5n instance types. If you specify
	// AllowedInstanceTypes , you can't specify ExcludedInstanceTypes . Default: All
	// instance types
	AllowedInstanceTypes []string

	// Indicates whether bare metal instance types must be included, excluded, or
	// required.
	//   - To include bare metal instance types, specify included .
	//   - To require only bare metal instance types, specify required .
	//   - To exclude bare metal instance types, specify excluded .
	// Default: excluded
	BareMetal BareMetal

	// The minimum and maximum baseline bandwidth to Amazon EBS, in Mbps. For more
	// information, see Amazon EBS–optimized instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html)
	// in the Amazon EC2 User Guide. Default: No minimum or maximum limits
	BaselineEbsBandwidthMbps *BaselineEbsBandwidthMbpsRequest

	// Indicates whether burstable performance T instance types are included,
	// excluded, or required. For more information, see Burstable performance instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)
	// .
	//   - To include burstable performance instance types, specify included .
	//   - To require only burstable performance instance types, specify required .
	//   - To exclude burstable performance instance types, specify excluded .
	// Default: excluded
	BurstablePerformance BurstablePerformance

	// The CPU manufacturers to include.
	//   - For instance types with Intel CPUs, specify intel .
	//   - For instance types with AMD CPUs, specify amd .
	//   - For instance types with Amazon Web Services CPUs, specify
	//   amazon-web-services .
	// Don't confuse the CPU manufacturer with the CPU architecture. Instances will be
	// launched with a compatible CPU architecture based on the Amazon Machine Image
	// (AMI) that you specify in your launch template. Default: Any manufacturer
	CpuManufacturers []CpuManufacturer

	// The instance types to exclude. You can use strings with one or more wild cards,
	// represented by an asterisk ( * ), to exclude an instance family, type, size, or
	// generation. The following are examples: m5.8xlarge , c5*.* , m5a.* , r* , *3* .
	// For example, if you specify c5* ,Amazon EC2 will exclude the entire C5 instance
	// family, which includes all C5a and C5n instance types. If you specify m5a.* ,
	// Amazon EC2 will exclude all the M5a instance types, but not the M5n instance
	// types. If you specify ExcludedInstanceTypes , you can't specify
	// AllowedInstanceTypes . Default: No excluded instance types
	ExcludedInstanceTypes []string

	// Indicates whether current or previous generation instance types are included.
	// The current generation instance types are recommended for use. Current
	// generation instance types are typically the latest two to three generations in
	// each instance family. For more information, see Instance types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)
	// in the Amazon EC2 User Guide. For current generation instance types, specify
	// current . For previous generation instance types, specify previous . Default:
	// Current and previous generation instance types
	InstanceGenerations []InstanceGeneration

	// Indicates whether instance types with instance store volumes are included,
	// excluded, or required. For more information, Amazon EC2 instance store (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)
	// in the Amazon EC2 User Guide.
	//   - To include instance types with instance store volumes, specify included .
	//   - To require only instance types with instance store volumes, specify required
	//   .
	//   - To exclude instance types with instance store volumes, specify excluded .
	// Default: included
	LocalStorage LocalStorage

	// The type of local storage that is required.
	//   - For instance types with hard disk drive (HDD) storage, specify hdd .
	//   - For instance types with solid state drive (SSD) storage, specify ssd .
	// Default: hdd and ssd
	LocalStorageTypes []LocalStorageType

	// [Price protection] The price protection threshold for Spot Instances, as a
	// percentage of an identified On-Demand price. The identified On-Demand price is
	// the price of the lowest priced current generation C, M, or R instance type with
	// your specified attributes. If no current generation C, M, or R instance type
	// matches your attributes, then the identified price is from the lowest priced
	// current generation instance types, and failing that, from the lowest priced
	// previous generation instance types that match your attributes. When Amazon EC2
	// selects instance types with your attributes, it will exclude instance types
	// whose price exceeds your specified threshold. The parameter accepts an integer,
	// which Amazon EC2 interprets as a percentage. To indicate no price protection
	// threshold, specify a high value, such as 999999 . If you set DesiredCapacityType
	// to vcpu or memory-mib , the price protection threshold is based on the per vCPU
	// or per memory price instead of the per instance price. Only one of
	// SpotMaxPricePercentageOverLowestPrice or
	// MaxSpotPriceAsPercentageOfOptimalOnDemandPrice can be specified. If you don't
	// specify either, then SpotMaxPricePercentageOverLowestPrice is used and the
	// value for that parameter defaults to 100 .
	MaxSpotPriceAsPercentageOfOptimalOnDemandPrice *int32

	// The minimum and maximum amount of memory per vCPU, in GiB. Default: No minimum
	// or maximum limits
	MemoryGiBPerVCpu *MemoryGiBPerVCpuRequest

	// The minimum and maximum amount of baseline network bandwidth, in gigabits per
	// second (Gbps). For more information, see Amazon EC2 instance network bandwidth (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html)
	// in the Amazon EC2 User Guide. Default: No minimum or maximum limits
	NetworkBandwidthGbps *NetworkBandwidthGbpsRequest

	// The minimum and maximum number of network interfaces. Default: No minimum or
	// maximum limits
	NetworkInterfaceCount *NetworkInterfaceCountRequest

	// [Price protection] The price protection threshold for On-Demand Instances, as a
	// percentage higher than an identified On-Demand price. The identified On-Demand
	// price is the price of the lowest priced current generation C, M, or R instance
	// type with your specified attributes. When Amazon EC2 selects instance types with
	// your attributes, it will exclude instance types whose price exceeds your
	// specified threshold. The parameter accepts an integer, which Amazon EC2
	// interprets as a percentage. To indicate no price protection threshold, specify a
	// high value, such as 999999 . This parameter is not supported for
	// GetSpotPlacementScores (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html)
	// and GetInstanceTypesFromInstanceRequirements (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html)
	// . If you set TargetCapacityUnitType to vcpu or memory-mib , the price protection
	// threshold is applied based on the per-vCPU or per-memory price instead of the
	// per-instance price. Default: 20
	OnDemandMaxPricePercentageOverLowestPrice *int32

	// Indicates whether instance types must support hibernation for On-Demand
	// Instances. This parameter is not supported for GetSpotPlacementScores (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html)
	// . Default: false
	RequireHibernateSupport *bool

	// [Price protection] The price protection threshold for Spot Instances, as a
	// percentage higher than an identified Spot price. The identified Spot price is
	// the Spot price of the lowest priced current generation C, M, or R instance type
	// with your specified attributes. If no current generation C, M, or R instance
	// type matches your attributes, then the identified Spot price is from the lowest
	// priced current generation instance types, and failing that, from the lowest
	// priced previous generation instance types that match your attributes. When
	// Amazon EC2 selects instance types with your attributes, it will exclude instance
	// types whose Spot price exceeds your specified threshold. The parameter accepts
	// an integer, which Amazon EC2 interprets as a percentage. To indicate no price
	// protection threshold, specify a high value, such as 999999 . If you set
	// TargetCapacityUnitType to vcpu or memory-mib , the price protection threshold is
	// applied based on the per-vCPU or per-memory price instead of the per-instance
	// price. This parameter is not supported for GetSpotPlacementScores (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetSpotPlacementScores.html)
	// and GetInstanceTypesFromInstanceRequirements (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_GetInstanceTypesFromInstanceRequirements.html)
	// . Only one of SpotMaxPricePercentageOverLowestPrice or
	// MaxSpotPriceAsPercentageOfOptimalOnDemandPrice can be specified. If you don't
	// specify either, then SpotMaxPricePercentageOverLowestPrice is used and the
	// value for that parameter defaults to 100 . Default: 100
	SpotMaxPricePercentageOverLowestPrice *int32

	// The minimum and maximum amount of total local storage, in GB. Default: No
	// minimum or maximum limits
	TotalLocalStorageGB *TotalLocalStorageGBRequest

	noSmithyDocumentSerde
}

// The architecture type, virtualization type, and other attributes for the
// instance types. When you specify instance attributes, Amazon EC2 will identify
// instance types with those attributes. If you specify
// InstanceRequirementsWithMetadataRequest , you can't specify InstanceTypes .
type InstanceRequirementsWithMetadataRequest struct {

	// The architecture type.
	ArchitectureTypes []ArchitectureType

	// The attributes for the instance types. When you specify instance attributes,
	// Amazon EC2 will identify instance types with those attributes.
	InstanceRequirements *InstanceRequirementsRequest

	// The virtualization type.
	VirtualizationTypes []VirtualizationType

	noSmithyDocumentSerde
}

// The instance details to specify which volumes should be snapshotted.
type InstanceSpecification struct {

	// The instance to specify which volumes should be snapshotted.
	//
	// This member is required.
	InstanceId *string

	// Excludes the root volume from being snapshotted.
	ExcludeBootVolume *bool

	// The IDs of the data (non-root) volumes to exclude from the multi-volume
	// snapshot set. If you specify the ID of the root volume, the request fails. To
	// exclude the root volume, use ExcludeBootVolume. You can specify up to 40 volume
	// IDs per request.
	ExcludeDataVolumeIds []string

	noSmithyDocumentSerde
}

// Describes the current state of an instance.
type InstanceState struct {

	// The state of the instance as a 16-bit unsigned integer. The high byte is all of
	// the bits between 2^8 and (2^16)-1, which equals decimal values between 256 and
	// 65,535. These numerical values are used for internal purposes and should be
	// ignored. The low byte is all of the bits between 2^0 and (2^8)-1, which equals
	// decimal values between 0 and 255. The valid values for instance-state-code will
	// all be in the range of the low byte and they are:
	//   - 0 : pending
	//   - 16 : running
	//   - 32 : shutting-down
	//   - 48 : terminated
	//   - 64 : stopping
	//   - 80 : stopped
	// You can ignore the high byte value by zeroing out all of the bits above 2^8 or
	// 256 in decimal.
	Code *int32

	// The current state of the instance.
	Name InstanceStateName

	noSmithyDocumentSerde
}

// Describes an instance state change.
type InstanceStateChange struct {

	// The current state of the instance.
	CurrentState *InstanceState

	// The ID of the instance.
	InstanceId *string

	// The previous state of the instance.
	PreviousState *InstanceState

	noSmithyDocumentSerde
}

// Describes the status of an instance.
type InstanceStatus struct {

	// The Availability Zone of the instance.
	AvailabilityZone *string

	// Any scheduled events associated with the instance.
	Events []InstanceStatusEvent

	// The ID of the instance.
	InstanceId *string

	// The intended state of the instance. DescribeInstanceStatus requires that an
	// instance be in the running state.
	InstanceState *InstanceState

	// Reports impaired functionality that stems from issues internal to the instance,
	// such as impaired reachability.
	InstanceStatus *InstanceStatusSummary

	// The Amazon Resource Name (ARN) of the Outpost.
	OutpostArn *string

	// Reports impaired functionality that stems from issues related to the systems
	// that support an instance, such as hardware failures and network connectivity
	// problems.
	SystemStatus *InstanceStatusSummary

	noSmithyDocumentSerde
}

// Describes the instance status.
type InstanceStatusDetails struct {

	// The time when a status check failed. For an instance that was launched and
	// impaired, this is the time when the instance was launched.
	ImpairedSince *time.Time

	// The type of instance status.
	Name StatusName

	// The status.
	Status StatusType

	noSmithyDocumentSerde
}

// Describes a scheduled event for an instance.
type InstanceStatusEvent struct {

	// The event code.
	Code EventCode

	// A description of the event. After a scheduled event is completed, it can still
	// be described for up to a week. If the event has been completed, this description
	// starts with the following text: [Completed].
	Description *string

	// The ID of the event.
	InstanceEventId *string

	// The latest scheduled end time for the event.
	NotAfter *time.Time

	// The earliest scheduled start time for the event.
	NotBefore *time.Time

	// The deadline for starting the event.
	NotBeforeDeadline *time.Time

	noSmithyDocumentSerde
}

// Describes the status of an instance.
type InstanceStatusSummary struct {

	// The system instance health or application instance health.
	Details []InstanceStatusDetails

	// The status.
	Status SummaryStatus

	noSmithyDocumentSerde
}

// Describes the instance store features that are supported by the instance type.
type InstanceStorageInfo struct {

	// Describes the disks that are available for the instance type.
	Disks []DiskInfo

	// Indicates whether data is encrypted at rest.
	EncryptionSupport InstanceStorageEncryptionSupport

	// Indicates whether non-volatile memory express (NVMe) is supported.
	NvmeSupport EphemeralNvmeSupport

	// The total size of the disks, in GB.
	TotalSizeInGB *int64

	noSmithyDocumentSerde
}

// Describes the registered tag keys for the current Region.
type InstanceTagNotificationAttribute struct {

	// Indicates wheter all tag keys in the current Region are registered to appear in
	// scheduled event notifications. true indicates that all tag keys in the current
	// Region are registered.
	IncludeAllTagsOfInstance *bool

	// The registered tag keys.
	InstanceTagKeys []string

	noSmithyDocumentSerde
}

// Information about the instance topology.
type InstanceTopology struct {

	// The name of the Availability Zone or Local Zone that the instance is in.
	AvailabilityZone *string

	// The name of the placement group that the instance is in.
	GroupName *string

	// The instance ID.
	InstanceId *string

	// The instance type.
	InstanceType *string

	// The network nodes. The nodes are hashed based on your account. Instances from
	// different accounts running under the same droplet will return a different hashed
	// list of strings.
	NetworkNodes []string

	// The ID of the Availability Zone or Local Zone that the instance is in.
	ZoneId *string

	noSmithyDocumentSerde
}

// Describes the instance type.
type InstanceTypeInfo struct {

	// Indicates whether Amazon CloudWatch action based recovery is supported.
	AutoRecoverySupported *bool

	// Indicates whether the instance is a bare metal instance type.
	BareMetal *bool

	// Indicates whether the instance type is a burstable performance T instance type.
	// For more information, see Burstable performance instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)
	// .
	BurstablePerformanceSupported *bool

	// Indicates whether the instance type is current generation.
	CurrentGeneration *bool

	// Indicates whether Dedicated Hosts are supported on the instance type.
	DedicatedHostsSupported *bool

	// Describes the Amazon EBS settings for the instance type.
	EbsInfo *EbsInfo

	// Describes the FPGA accelerator settings for the instance type.
	FpgaInfo *FpgaInfo

	// Indicates whether the instance type is eligible for the free tier.
	FreeTierEligible *bool

	// Describes the GPU accelerator settings for the instance type.
	GpuInfo *GpuInfo

	// Indicates whether On-Demand hibernation is supported.
	HibernationSupported *bool

	// The hypervisor for the instance type.
	Hypervisor InstanceTypeHypervisor

	// Describes the Inference accelerator settings for the instance type.
	InferenceAcceleratorInfo *InferenceAcceleratorInfo

	// Describes the instance storage for the instance type.
	InstanceStorageInfo *InstanceStorageInfo

	// Indicates whether instance storage is supported.
	InstanceStorageSupported *bool

	// The instance type. For more information, see Instance types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)
	// in the Amazon EC2 User Guide.
	InstanceType InstanceType

	// Describes the memory for the instance type.
	MemoryInfo *MemoryInfo

	// Describes the network settings for the instance type.
	NetworkInfo *NetworkInfo

	// Indicates whether Nitro Enclaves is supported.
	NitroEnclavesSupport NitroEnclavesSupport

	// Describes the supported NitroTPM versions for the instance type.
	NitroTpmInfo *NitroTpmInfo

	// Indicates whether NitroTPM is supported.
	NitroTpmSupport NitroTpmSupport

	// Describes the placement group settings for the instance type.
	PlacementGroupInfo *PlacementGroupInfo

	// Describes the processor.
	ProcessorInfo *ProcessorInfo

	// The supported boot modes. For more information, see Boot modes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-boot.html)
	// in the Amazon EC2 User Guide.
	SupportedBootModes []BootModeType

	// The supported root device types.
	SupportedRootDeviceTypes []RootDeviceType

	// Indicates whether the instance type is offered for spot or On-Demand.
	SupportedUsageClasses []UsageClassType

	// The supported virtualization types.
	SupportedVirtualizationTypes []VirtualizationType

	// Describes the vCPU configurations for the instance type.
	VCpuInfo *VCpuInfo

	noSmithyDocumentSerde
}

// The list of instance types with the specified instance attributes.
type InstanceTypeInfoFromInstanceRequirements struct {

	// The matching instance type.
	InstanceType *string

	noSmithyDocumentSerde
}

// The instance types offered.
type InstanceTypeOffering struct {

	// The instance type. For more information, see Instance types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)
	// in the Amazon EC2 User Guide.
	InstanceType InstanceType

	// The identifier for the location. This depends on the location type. For
	// example, if the location type is region , the location is the Region code (for
	// example, us-east-2 .)
	Location *string

	// The location type.
	LocationType LocationType

	noSmithyDocumentSerde
}

// Information about the Capacity Reservation usage.
type InstanceUsage struct {

	// The ID of the Amazon Web Services account that is making use of the Capacity
	// Reservation.
	AccountId *string

	// The number of instances the Amazon Web Services account currently has in the
	// Capacity Reservation.
	UsedInstanceCount *int32

	noSmithyDocumentSerde
}

// Describes service integrations with VPC Flow logs.
type IntegrateServices struct {

	// Information about the integration with Amazon Athena.
	AthenaIntegrations []AthenaIntegration

	noSmithyDocumentSerde
}

// Describes an internet gateway.
type InternetGateway struct {

	// Any VPCs attached to the internet gateway.
	Attachments []InternetGatewayAttachment

	// The ID of the internet gateway.
	InternetGatewayId *string

	// The ID of the Amazon Web Services account that owns the internet gateway.
	OwnerId *string

	// Any tags assigned to the internet gateway.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes the attachment of a VPC to an internet gateway or an egress-only
// internet gateway.
type InternetGatewayAttachment struct {

	// The current state of the attachment. For an internet gateway, the state is
	// available when attached to a VPC; otherwise, this value is not returned.
	State AttachmentStatus

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// IPAM is a VPC feature that you can use to automate your IP address management
// workflows including assigning, tracking, troubleshooting, and auditing IP
// addresses across Amazon Web Services Regions and accounts throughout your Amazon
// Web Services Organization. For more information, see What is IPAM? (https://docs.aws.amazon.com/vpc/latest/ipam/what-is-it-ipam.html)
// in the Amazon VPC IPAM User Guide.
type Ipam struct {

	// The IPAM's default resource discovery association ID.
	DefaultResourceDiscoveryAssociationId *string

	// The IPAM's default resource discovery ID.
	DefaultResourceDiscoveryId *string

	// The description for the IPAM.
	Description *string

	// The Amazon Resource Name (ARN) of the IPAM.
	IpamArn *string

	// The ID of the IPAM.
	IpamId *string

	// The Amazon Web Services Region of the IPAM.
	IpamRegion *string

	// The operating Regions for an IPAM. Operating Regions are Amazon Web Services
	// Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only
	// discovers and monitors resources in the Amazon Web Services Regions you select
	// as operating Regions. For more information about operating Regions, see Create
	// an IPAM (https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html) in the
	// Amazon VPC IPAM User Guide.
	OperatingRegions []IpamOperatingRegion

	// The Amazon Web Services account ID of the owner of the IPAM.
	OwnerId *string

	// The ID of the IPAM's default private scope.
	PrivateDefaultScopeId *string

	// The ID of the IPAM's default public scope.
	PublicDefaultScopeId *string

	// The IPAM's resource discovery association count.
	ResourceDiscoveryAssociationCount *int32

	// The number of scopes in the IPAM. The scope quota is 5. For more information on
	// quotas, see Quotas in IPAM (https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html)
	// in the Amazon VPC IPAM User Guide.
	ScopeCount *int32

	// The state of the IPAM.
	State IpamState

	// The state message.
	StateMessage *string

	// The key/value combination of a tag assigned to the resource. Use the tag key in
	// the filter name and the tag value as the filter value. For example, to find all
	// resources that have a tag with the key Owner and the value TeamA , specify
	// tag:Owner for the filter name and TeamA for the filter value.
	Tags []Tag

	// IPAM is offered in a Free Tier and an Advanced Tier. For more information about
	// the features available in each tier and the costs associated with the tiers, see
	// Amazon VPC pricing > IPAM tab (http://aws.amazon.com/vpc/pricing/) .
	Tier IpamTier

	noSmithyDocumentSerde
}

// The historical record of a CIDR within an IPAM scope. For more information, see
// View the history of IP addresses (https://docs.aws.amazon.com/vpc/latest/ipam/view-history-cidr-ipam.html)
// in the Amazon VPC IPAM User Guide.
type IpamAddressHistoryRecord struct {

	// The CIDR of the resource.
	ResourceCidr *string

	// The compliance status of a resource. For more information on compliance
	// statuses, see Monitor CIDR usage by resource (https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html)
	// in the Amazon VPC IPAM User Guide.
	ResourceComplianceStatus IpamComplianceStatus

	// The ID of the resource.
	ResourceId *string

	// The name of the resource.
	ResourceName *string

	// The overlap status of an IPAM resource. The overlap status tells you if the
	// CIDR for a resource overlaps with another CIDR in the scope. For more
	// information on overlap statuses, see Monitor CIDR usage by resource (https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html)
	// in the Amazon VPC IPAM User Guide.
	ResourceOverlapStatus IpamOverlapStatus

	// The ID of the resource owner.
	ResourceOwnerId *string

	// The Amazon Web Services Region of the resource.
	ResourceRegion *string

	// The type of the resource.
	ResourceType IpamAddressHistoryResourceType

	// Sampled end time of the resource-to-CIDR association within the IPAM scope.
	// Changes are picked up in periodic snapshots, so the end time may have occurred
	// before this specific time.
	SampledEndTime *time.Time

	// Sampled start time of the resource-to-CIDR association within the IPAM scope.
	// Changes are picked up in periodic snapshots, so the start time may have occurred
	// before this specific time.
	SampledStartTime *time.Time

	// The VPC ID of the resource.
	VpcId *string

	noSmithyDocumentSerde
}

// A signed document that proves that you are authorized to bring the specified IP
// address range to Amazon using BYOIP.
type IpamCidrAuthorizationContext struct {

	// The plain-text authorization message for the prefix and account.
	Message *string

	// The signed authorization message for the prefix and account.
	Signature *string

	noSmithyDocumentSerde
}

// An IPAM discovered account. A discovered account is an Amazon Web Services
// account that is monitored under a resource discovery. If you have integrated
// IPAM with Amazon Web Services Organizations, all accounts in the organization
// are discovered accounts.
type IpamDiscoveredAccount struct {

	// The account ID.
	AccountId *string

	// The Amazon Web Services Region that the account information is returned from.
	// An account can be discovered in multiple regions and will have a separate
	// discovered account for each Region.
	DiscoveryRegion *string

	// The resource discovery failure reason.
	FailureReason *IpamDiscoveryFailureReason

	// The last attempted resource discovery time.
	LastAttemptedDiscoveryTime *time.Time

	// The last successful resource discovery time.
	LastSuccessfulDiscoveryTime *time.Time

	noSmithyDocumentSerde
}

// A public IP Address discovered by IPAM.
type IpamDiscoveredPublicAddress struct {

	// The IP address.
	Address *string

	// The allocation ID of the resource the IP address is assigned to.
	AddressAllocationId *string

	// The ID of the owner of the resource the IP address is assigned to.
	AddressOwnerId *string

	// The Region of the resource the IP address is assigned to.
	AddressRegion *string

	// The IP address type.
	AddressType IpamPublicAddressType

	// The association status.
	AssociationStatus IpamPublicAddressAssociationStatus

	// The instance ID of the instance the assigned IP address is assigned to.
	InstanceId *string

	// The resource discovery ID.
	IpamResourceDiscoveryId *string

	// The network border group that the resource that the IP address is assigned to
	// is in.
	NetworkBorderGroup *string

	// The description of the network interface that IP address is assigned to.
	NetworkInterfaceDescription *string

	// The network interface ID of the resource with the assigned IP address.
	NetworkInterfaceId *string

	// The ID of the public IPv4 pool that the resource with the assigned IP address
	// is from.
	PublicIpv4PoolId *string

	// The last successful resource discovery time.
	SampleTime *time.Time

	// Security groups associated with the resource that the IP address is assigned to.
	SecurityGroups []IpamPublicAddressSecurityGroup

	// The Amazon Web Services service associated with the IP address.
	Service IpamPublicAddressAwsService

	// The resource ARN or ID.
	ServiceResource *string

	// The ID of the subnet that the resource with the assigned IP address is in.
	SubnetId *string

	// Tags associated with the IP address.
	Tags *IpamPublicAddressTags

	// The ID of the VPC that the resource with the assigned IP address is in.
	VpcId *string

	noSmithyDocumentSerde
}

// An IPAM discovered resource CIDR. A discovered resource is a resource CIDR
// monitored under a resource discovery. The following resources can be discovered:
// VPCs, Public IPv4 pools, VPC subnets, and Elastic IP addresses. The discovered
// resource CIDR is the IP address range in CIDR notation that is associated with
// the resource.
type IpamDiscoveredResourceCidr struct {

	// The percentage of IP address space in use. To convert the decimal to a
	// percentage, multiply the decimal by 100. Note the following:
	//   - For resources that are VPCs, this is the percentage of IP address space in
	//   the VPC that's taken up by subnet CIDRs.
	//   - For resources that are subnets, if the subnet has an IPv4 CIDR provisioned
	//   to it, this is the percentage of IPv4 address space in the subnet that's in use.
	//   If the subnet has an IPv6 CIDR provisioned to it, the percentage of IPv6 address
	//   space in use is not represented. The percentage of IPv6 address space in use
	//   cannot currently be calculated.
	//   - For resources that are public IPv4 pools, this is the percentage of IP
	//   address space in the pool that's been allocated to Elastic IP addresses (EIPs).
	IpUsage *float64

	// The resource discovery ID.
	IpamResourceDiscoveryId *string

	// The resource CIDR.
	ResourceCidr *string

	// The resource ID.
	ResourceId *string

	// The resource owner ID.
	ResourceOwnerId *string

	// The resource Region.
	ResourceRegion *string

	// The resource tags.
	ResourceTags []IpamResourceTag

	// The resource type.
	ResourceType IpamResourceType

	// The last successful resource discovery time.
	SampleTime *time.Time

	// The VPC ID.
	VpcId *string

	noSmithyDocumentSerde
}

// The discovery failure reason.
type IpamDiscoveryFailureReason struct {

	// The discovery failure code.
	//   - assume-role-failure - IPAM could not assume the Amazon Web Services IAM
	//   service-linked role. This could be because of any of the following:
	//   - SLR has not been created yet and IPAM is still creating it.
	//   - You have opted-out of the IPAM home Region.
	//   - Account you are using as your IPAM account has been suspended.
	//   - throttling-failure - IPAM account is already using the allotted transactions
	//   per second and IPAM is receiving a throttling error when assuming the Amazon Web
	//   Services IAM SLR.
	//   - unauthorized-failure - Amazon Web Services account making the request is not
	//   authorized. For more information, see AuthFailure (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)
	//   in the Amazon Elastic Compute Cloud API Reference.
	Code IpamDiscoveryFailureCode

	// The discovery failure message.
	Message *string

	noSmithyDocumentSerde
}

// The operating Regions for an IPAM. Operating Regions are Amazon Web Services
// Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only
// discovers and monitors resources in the Amazon Web Services Regions you select
// as operating Regions. For more information about operating Regions, see Create
// an IPAM (https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html) in the
// Amazon VPC IPAM User Guide.
type IpamOperatingRegion struct {

	// The name of the operating Region.
	RegionName *string

	noSmithyDocumentSerde
}

// In IPAM, a pool is a collection of contiguous IP addresses CIDRs. Pools enable
// you to organize your IP addresses according to your routing and security needs.
// For example, if you have separate routing and security needs for development and
// production applications, you can create a pool for each.
type IpamPool struct {

	// The address family of the pool.
	AddressFamily AddressFamily

	// The default netmask length for allocations added to this pool. If, for example,
	// the CIDR assigned to this pool is 10.0.0.0/8 and you enter 16 here, new
	// allocations will default to 10.0.0.0/16.
	AllocationDefaultNetmaskLength *int32

	// The maximum netmask length possible for CIDR allocations in this IPAM pool to
	// be compliant. The maximum netmask length must be greater than the minimum
	// netmask length. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible
	// netmask lengths for IPv6 addresses are 0 - 128.
	AllocationMaxNetmaskLength *int32

	// The minimum netmask length required for CIDR allocations in this IPAM pool to
	// be compliant. The minimum netmask length must be less than the maximum netmask
	// length. Possible netmask lengths for IPv4 addresses are 0 - 32. Possible netmask
	// lengths for IPv6 addresses are 0 - 128.
	AllocationMinNetmaskLength *int32

	// Tags that are required for resources that use CIDRs from this IPAM pool.
	// Resources that do not have these tags will not be allowed to allocate space from
	// the pool. If the resources have their tags changed after they have allocated
	// space or if the allocation tagging requirements are changed on the pool, the
	// resource may be marked as noncompliant.
	AllocationResourceTags []IpamResourceTag

	// If selected, IPAM will continuously look for resources within the CIDR range of
	// this pool and automatically import them as allocations into your IPAM. The CIDRs
	// that will be allocated for these resources must not already be allocated to
	// other resources in order for the import to succeed. IPAM will import a CIDR
	// regardless of its compliance with the pool's allocation rules, so a resource
	// might be imported and subsequently marked as noncompliant. If IPAM discovers
	// multiple CIDRs that overlap, IPAM will import the largest CIDR only. If IPAM
	// discovers multiple CIDRs with matching CIDRs, IPAM will randomly import one of
	// them only. A locale must be set on the pool for this feature to work.
	AutoImport *bool

	// Limits which service in Amazon Web Services that the pool can be used in.
	// "ec2", for example, allows users to use space for Elastic IP addresses and VPCs.
	AwsService IpamPoolAwsService

	// The description of the IPAM pool.
	Description *string

	// The ARN of the IPAM.
	IpamArn *string

	// The Amazon Resource Name (ARN) of the IPAM pool.
	IpamPoolArn *string

	// The ID of the IPAM pool.
	IpamPoolId *string

	// The Amazon Web Services Region of the IPAM pool.
	IpamRegion *string

	// The ARN of the scope of the IPAM pool.
	IpamScopeArn *string

	// In IPAM, a scope is the highest-level container within IPAM. An IPAM contains
	// two default scopes. Each scope represents the IP space for a single network. The
	// private scope is intended for all private IP address space. The public scope is
	// intended for all public IP address space. Scopes enable you to reuse IP
	// addresses across multiple unconnected networks without causing IP address
	// overlap or conflict.
	IpamScopeType IpamScopeType

	// The locale of the IPAM pool. In IPAM, the locale is the Amazon Web Services
	// Region where you want to make an IPAM pool available for allocations. Only
	// resources in the same Region as the locale of the pool can get IP address
	// allocations from the pool. You can only allocate a CIDR for a VPC, for example,
	// from an IPAM pool that shares a locale with the VPC’s Region. Note that once you
	// choose a Locale for a pool, you cannot modify it. If you choose an Amazon Web
	// Services Region for locale that has not been configured as an operating Region
	// for the IPAM, you'll get an error.
	Locale *string

	// The Amazon Web Services account ID of the owner of the IPAM pool.
	OwnerId *string

	// The depth of pools in your IPAM pool. The pool depth quota is 10. For more
	// information, see Quotas in IPAM (https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html)
	// in the Amazon VPC IPAM User Guide.
	PoolDepth *int32

	// The IP address source for pools in the public scope. Only used for provisioning
	// IP address CIDRs to pools in the public scope. Default is BYOIP . For more
	// information, see Create IPv6 pools (https://docs.aws.amazon.com/vpc/latest/ipam/intro-create-ipv6-pools.html)
	// in the Amazon VPC IPAM User Guide. By default, you can add only one
	// Amazon-provided IPv6 CIDR block to a top-level IPv6 pool. For information on
	// increasing the default limit, see Quotas for your IPAM (https://docs.aws.amazon.com/vpc/latest/ipam/quotas-ipam.html)
	// in the Amazon VPC IPAM User Guide.
	PublicIpSource IpamPoolPublicIpSource

	// Determines if a pool is publicly advertisable. This option is not available for
	// pools with AddressFamily set to ipv4 .
	PubliclyAdvertisable *bool

	// The ID of the source IPAM pool. You can use this option to create an IPAM pool
	// within an existing source pool.
	SourceIpamPoolId *string

	// The resource used to provision CIDRs to a resource planning pool.
	SourceResource *IpamPoolSourceResource

	// The state of the IPAM pool.
	State IpamPoolState

	// The state message.
	StateMessage *string

	// The key/value combination of a tag assigned to the resource. Use the tag key in
	// the filter name and the tag value as the filter value. For example, to find all
	// resources that have a tag with the key Owner and the value TeamA , specify
	// tag:Owner for the filter name and TeamA for the filter value.
	Tags []Tag

	noSmithyDocumentSerde
}

// In IPAM, an allocation is a CIDR assignment from an IPAM pool to another IPAM
// pool or to a resource.
type IpamPoolAllocation struct {

	// The CIDR for the allocation. A CIDR is a representation of an IP address and
	// its associated network mask (or netmask) and refers to a range of IP addresses.
	// An IPv4 CIDR example is 10.24.34.0/23 . An IPv6 CIDR example is 2001:DB8::/32 .
	Cidr *string

	// A description of the pool allocation.
	Description *string

	// The ID of an allocation.
	IpamPoolAllocationId *string

	// The ID of the resource.
	ResourceId *string

	// The owner of the resource.
	ResourceOwner *string

	// The Amazon Web Services Region of the resource.
	ResourceRegion *string

	// The type of the resource.
	ResourceType IpamPoolAllocationResourceType

	noSmithyDocumentSerde
}

// A CIDR provisioned to an IPAM pool.
type IpamPoolCidr struct {

	// The CIDR provisioned to the IPAM pool. A CIDR is a representation of an IP
	// address and its associated network mask (or netmask) and refers to a range of IP
	// addresses. An IPv4 CIDR example is 10.24.34.0/23 . An IPv6 CIDR example is
	// 2001:DB8::/32 .
	Cidr *string

	// Details related to why an IPAM pool CIDR failed to be provisioned.
	FailureReason *IpamPoolCidrFailureReason

	// The IPAM pool CIDR ID.
	IpamPoolCidrId *string

	// The netmask length of the CIDR you'd like to provision to a pool. Can be used
	// for provisioning Amazon-provided IPv6 CIDRs to top-level pools and for
	// provisioning CIDRs to pools with source pools. Cannot be used to provision BYOIP
	// CIDRs to top-level pools. "NetmaskLength" or "Cidr" is required.
	NetmaskLength *int32

	// The state of the CIDR.
	State IpamPoolCidrState

	noSmithyDocumentSerde
}

// Details related to why an IPAM pool CIDR failed to be provisioned.
type IpamPoolCidrFailureReason struct {

	// An error code related to why an IPAM pool CIDR failed to be provisioned.
	Code IpamPoolCidrFailureCode

	// A message related to why an IPAM pool CIDR failed to be provisioned.
	Message *string

	noSmithyDocumentSerde
}

// The resource used to provision CIDRs to a resource planning pool.
type IpamPoolSourceResource struct {

	// The source resource ID.
	ResourceId *string

	// The source resource owner.
	ResourceOwner *string

	// The source resource Region.
	ResourceRegion *string

	// The source resource type.
	ResourceType IpamPoolSourceResourceType

	noSmithyDocumentSerde
}

// The resource used to provision CIDRs to a resource planning pool.
type IpamPoolSourceResourceRequest struct {

	// The source resource ID.
	ResourceId *string

	// The source resource owner.
	ResourceOwner *string

	// The source resource Region.
	ResourceRegion *string

	// The source resource type.
	ResourceType IpamPoolSourceResourceType

	noSmithyDocumentSerde
}

// The security group that the resource with the public IP address is in.
type IpamPublicAddressSecurityGroup struct {

	// The security group's ID.
	GroupId *string

	// The security group's name.
	GroupName *string

	noSmithyDocumentSerde
}

// A tag for a public IP address discovered by IPAM.
type IpamPublicAddressTag struct {

	// The tag's key.
	Key *string

	// The tag's value.
	Value *string

	noSmithyDocumentSerde
}

// Tags for a public IP address discovered by IPAM.
type IpamPublicAddressTags struct {

	// Tags for an Elastic IP address.
	EipTags []IpamPublicAddressTag

	noSmithyDocumentSerde
}

// The CIDR for an IPAM resource.
type IpamResourceCidr struct {

	// The compliance status of the IPAM resource. For more information on compliance
	// statuses, see Monitor CIDR usage by resource (https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html)
	// in the Amazon VPC IPAM User Guide.
	ComplianceStatus IpamComplianceStatus

	// The percentage of IP address space in use. To convert the decimal to a
	// percentage, multiply the decimal by 100. Note the following:
	//   - For resources that are VPCs, this is the percentage of IP address space in
	//   the VPC that's taken up by subnet CIDRs.
	//   - For resources that are subnets, if the subnet has an IPv4 CIDR provisioned
	//   to it, this is the percentage of IPv4 address space in the subnet that's in use.
	//   If the subnet has an IPv6 CIDR provisioned to it, the percentage of IPv6 address
	//   space in use is not represented. The percentage of IPv6 address space in use
	//   cannot currently be calculated.
	//   - For resources that are public IPv4 pools, this is the percentage of IP
	//   address space in the pool that's been allocated to Elastic IP addresses (EIPs).
	IpUsage *float64

	// The IPAM ID for an IPAM resource.
	IpamId *string

	// The pool ID for an IPAM resource.
	IpamPoolId *string

	// The scope ID for an IPAM resource.
	IpamScopeId *string

	// The management state of the resource. For more information about management
	// states, see Monitor CIDR usage by resource (https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html)
	// in the Amazon VPC IPAM User Guide.
	ManagementState IpamManagementState

	// The overlap status of an IPAM resource. The overlap status tells you if the
	// CIDR for a resource overlaps with another CIDR in the scope. For more
	// information on overlap statuses, see Monitor CIDR usage by resource (https://docs.aws.amazon.com/vpc/latest/ipam/monitor-cidr-compliance-ipam.html)
	// in the Amazon VPC IPAM User Guide.
	OverlapStatus IpamOverlapStatus

	// The CIDR for an IPAM resource.
	ResourceCidr *string

	// The ID of an IPAM resource.
	ResourceId *string

	// The name of an IPAM resource.
	ResourceName *string

	// The Amazon Web Services account number of the owner of an IPAM resource.
	ResourceOwnerId *string

	// The Amazon Web Services Region for an IPAM resource.
	ResourceRegion *string

	// The tags for an IPAM resource.
	ResourceTags []IpamResourceTag

	// The type of IPAM resource.
	ResourceType IpamResourceType

	// The ID of a VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// A resource discovery is an IPAM component that enables IPAM to manage and
// monitor resources that belong to the owning account.
type IpamResourceDiscovery struct {

	// The resource discovery description.
	Description *string

	// The resource discovery Amazon Resource Name (ARN).
	IpamResourceDiscoveryArn *string

	// The resource discovery ID.
	IpamResourceDiscoveryId *string

	// The resource discovery Region.
	IpamResourceDiscoveryRegion *string

	// Defines if the resource discovery is the default. The default resource
	// discovery is the resource discovery automatically created when you create an
	// IPAM.
	IsDefault *bool

	// The operating Regions for the resource discovery. Operating Regions are Amazon
	// Web Services Regions where the IPAM is allowed to manage IP address CIDRs. IPAM
	// only discovers and monitors resources in the Amazon Web Services Regions you
	// select as operating Regions.
	OperatingRegions []IpamOperatingRegion

	// The ID of the owner.
	OwnerId *string

	// The lifecycle state of the resource discovery.
	//   - create-in-progress - Resource discovery is being created.
	//   - create-complete - Resource discovery creation is complete.
	//   - create-failed - Resource discovery creation has failed.
	//   - modify-in-progress - Resource discovery is being modified.
	//   - modify-complete - Resource discovery modification is complete.
	//   - modify-failed - Resource discovery modification has failed.
	//   - delete-in-progress - Resource discovery is being deleted.
	//   - delete-complete - Resource discovery deletion is complete.
	//   - delete-failed - Resource discovery deletion has failed.
	//   - isolate-in-progress - Amazon Web Services account that created the resource
	//   discovery has been removed and the resource discovery is being isolated.
	//   - isolate-complete - Resource discovery isolation is complete.
	//   - restore-in-progress - Amazon Web Services account that created the resource
	//   discovery and was isolated has been restored.
	State IpamResourceDiscoveryState

	// A tag is a label that you assign to an Amazon Web Services resource. Each tag
	// consists of a key and an optional value. You can use tags to search and filter
	// your resources or track your Amazon Web Services costs.
	Tags []Tag

	noSmithyDocumentSerde
}

// An IPAM resource discovery association. An associated resource discovery is a
// resource discovery that has been associated with an IPAM. IPAM aggregates the
// resource CIDRs discovered by the associated resource discovery.
type IpamResourceDiscoveryAssociation struct {

	// The IPAM ARN.
	IpamArn *string

	// The IPAM ID.
	IpamId *string

	// The IPAM home Region.
	IpamRegion *string

	// The resource discovery association Amazon Resource Name (ARN).
	IpamResourceDiscoveryAssociationArn *string

	// The resource discovery association ID.
	IpamResourceDiscoveryAssociationId *string

	// The resource discovery ID.
	IpamResourceDiscoveryId *string

	// Defines if the resource discovery is the default. When you create an IPAM, a
	// default resource discovery is created for your IPAM and it's associated with
	// your IPAM.
	IsDefault *bool

	// The Amazon Web Services account ID of the resource discovery owner.
	OwnerId *string

	// The resource discovery status.
	//   - active - Connection or permissions required to read the results of the
	//   resource discovery are intact.
	//   - not-found - Connection or permissions required to read the results of the
	//   resource discovery are broken. This may happen if the owner of the resource
	//   discovery stopped sharing it or deleted the resource discovery. Verify the
	//   resource discovery still exists and the Amazon Web Services RAM resource share
	//   is still intact.
	ResourceDiscoveryStatus IpamAssociatedResourceDiscoveryStatus

	// The lifecycle state of the association when you associate or disassociate a
	// resource discovery.
	//   - associate-in-progress - Resource discovery is being associated.
	//   - associate-complete - Resource discovery association is complete.
	//   - associate-failed - Resource discovery association has failed.
	//   - disassociate-in-progress - Resource discovery is being disassociated.
	//   - disassociate-complete - Resource discovery disassociation is complete.
	//   - disassociate-failed - Resource discovery disassociation has failed.
	//   - isolate-in-progress - Amazon Web Services account that created the resource
	//   discovery association has been removed and the resource discovery associatation
	//   is being isolated.
	//   - isolate-complete - Resource discovery isolation is complete..
	//   - restore-in-progress - Resource discovery is being restored.
	State IpamResourceDiscoveryAssociationState

	// A tag is a label that you assign to an Amazon Web Services resource. Each tag
	// consists of a key and an optional value. You can use tags to search and filter
	// your resources or track your Amazon Web Services costs.
	Tags []Tag

	noSmithyDocumentSerde
}

// The key/value combination of a tag assigned to the resource. Use the tag key in
// the filter name and the tag value as the filter value. For example, to find all
// resources that have a tag with the key Owner and the value TeamA , specify
// tag:Owner for the filter name and TeamA for the filter value.
type IpamResourceTag struct {

	// The key of a tag assigned to the resource. Use this filter to find all
	// resources assigned a tag with a specific key, regardless of the tag value.
	Key *string

	// The value of the tag.
	Value *string

	noSmithyDocumentSerde
}

// In IPAM, a scope is the highest-level container within IPAM. An IPAM contains
// two default scopes. Each scope represents the IP space for a single network. The
// private scope is intended for all private IP address space. The public scope is
// intended for all public IP address space. Scopes enable you to reuse IP
// addresses across multiple unconnected networks without causing IP address
// overlap or conflict. For more information, see How IPAM works (https://docs.aws.amazon.com/vpc/latest/ipam/how-it-works-ipam.html)
// in the Amazon VPC IPAM User Guide.
type IpamScope struct {

	// The description of the scope.
	Description *string

	// The ARN of the IPAM.
	IpamArn *string

	// The Amazon Web Services Region of the IPAM scope.
	IpamRegion *string

	// The Amazon Resource Name (ARN) of the scope.
	IpamScopeArn *string

	// The ID of the scope.
	IpamScopeId *string

	// The type of the scope.
	IpamScopeType IpamScopeType

	// Defines if the scope is the default scope or not.
	IsDefault *bool

	// The Amazon Web Services account ID of the owner of the scope.
	OwnerId *string

	// The number of pools in the scope.
	PoolCount *int32

	// The state of the IPAM scope.
	State IpamScopeState

	// The key/value combination of a tag assigned to the resource. Use the tag key in
	// the filter name and the tag value as the filter value. For example, to find all
	// resources that have a tag with the key Owner and the value TeamA , specify
	// tag:Owner for the filter name and TeamA for the filter value.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes a set of permissions for a security group rule.
type IpPermission struct {

	// If the protocol is TCP or UDP, this is the start of the port range. If the
	// protocol is ICMP or ICMPv6, this is the type number. A value of -1 indicates all
	// ICMP/ICMPv6 types. If you specify all ICMP/ICMPv6 types, you must specify all
	// ICMP/ICMPv6 codes.
	FromPort *int32

	// The IP protocol name ( tcp , udp , icmp , icmpv6 ) or number (see Protocol
	// Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)
	// ). Use -1 to specify all protocols. When authorizing security group rules,
	// specifying -1 or a protocol number other than tcp , udp , icmp , or icmpv6
	// allows traffic on all ports, regardless of any port range you specify. For tcp ,
	// udp , and icmp , you must specify a port range. For icmpv6 , the port range is
	// optional; if you omit the port range, traffic for all types and codes is
	// allowed.
	IpProtocol *string

	// The IPv4 ranges.
	IpRanges []IpRange

	// The IPv6 ranges.
	Ipv6Ranges []Ipv6Range

	// The prefix list IDs.
	PrefixListIds []PrefixListId

	// If the protocol is TCP or UDP, this is the end of the port range. If the
	// protocol is ICMP or ICMPv6, this is the code. A value of -1 indicates all
	// ICMP/ICMPv6 codes. If you specify all ICMP/ICMPv6 types, you must specify all
	// ICMP/ICMPv6 codes.
	ToPort *int32

	// The security group and Amazon Web Services account ID pairs.
	UserIdGroupPairs []UserIdGroupPair

	noSmithyDocumentSerde
}

// Describes an IPv4 range.
type IpRange struct {

	// The IPv4 CIDR range. You can either specify a CIDR range or a source security
	// group, not both. To specify a single IPv4 address, use the /32 prefix length.
	CidrIp *string

	// A description for the security group rule that references this IPv4 address
	// range. Constraints: Up to 255 characters in length. Allowed characters are a-z,
	// A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*
	Description *string

	noSmithyDocumentSerde
}

// Describes an IPv4 prefix.
type Ipv4PrefixSpecification struct {

	// The IPv4 prefix. For information, see  Assigning prefixes to Amazon EC2 network
	// interfaces (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	Ipv4Prefix *string

	noSmithyDocumentSerde
}

// Describes the IPv4 prefix option for a network interface.
type Ipv4PrefixSpecificationRequest struct {

	// The IPv4 prefix. For information, see  Assigning prefixes to Amazon EC2 network
	// interfaces (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-prefix-eni.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	Ipv4Prefix *string

	noSmithyDocumentSerde
}

// Information about the IPv4 delegated prefixes assigned to a network interface.
type Ipv4PrefixSpecificationResponse struct {

	// The IPv4 delegated prefixes assigned to the network interface.
	Ipv4Prefix *string

	noSmithyDocumentSerde
}

// Describes an IPv6 CIDR block association.
type Ipv6CidrAssociation struct {

	// The resource that's associated with the IPv6 CIDR block.
	AssociatedResource *string

	// The IPv6 CIDR block.
	Ipv6Cidr *string

	noSmithyDocumentSerde
}

// Describes an IPv6 CIDR block.
type Ipv6CidrBlock struct {

	// The IPv6 CIDR block.
	Ipv6CidrBlock *string

	noSmithyDocumentSerde
}

// Describes an IPv6 address pool.
type Ipv6Pool struct {

	// The description for the address pool.
	Description *string

	// The CIDR blocks for the address pool.
	PoolCidrBlocks []PoolCidrBlock

	// The ID of the address pool.
	PoolId *string

	// Any tags for the address pool.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes the IPv6 prefix.
type Ipv6PrefixSpecification struct {

	// The IPv6 prefix.
	Ipv6Prefix *string

	noSmithyDocumentSerde
}

// Describes the IPv4 prefix option for a network interface.
type Ipv6PrefixSpecificationRequest struct {

	// The IPv6 prefix.
	Ipv6Prefix *string

	noSmithyDocumentSerde
}

// Information about the IPv6 delegated prefixes assigned to a network interface.
type Ipv6PrefixSpecificationResponse struct {

	// The IPv6 delegated prefixes assigned to the network interface.
	Ipv6Prefix *string

	noSmithyDocumentSerde
}

// Describes an IPv6 range.
type Ipv6Range struct {

	// The IPv6 CIDR range. You can either specify a CIDR range or a source security
	// group, not both. To specify a single IPv6 address, use the /128 prefix length.
	CidrIpv6 *string

	// A description for the security group rule that references this IPv6 address
	// range. Constraints: Up to 255 characters in length. Allowed characters are a-z,
	// A-Z, 0-9, spaces, and ._-:/()#,@[]+=&;{}!$*
	Description *string

	noSmithyDocumentSerde
}

// Describes a key pair.
type KeyPairInfo struct {

	// If you used Amazon EC2 to create the key pair, this is the date and time when
	// the key was created, in ISO 8601 date-time format (https://www.iso.org/iso-8601-date-and-time-format.html)
	// , in the UTC time zone. If you imported an existing key pair to Amazon EC2, this
	// is the date and time the key was imported, in ISO 8601 date-time format (https://www.iso.org/iso-8601-date-and-time-format.html)
	// , in the UTC time zone.
	CreateTime *time.Time

	// If you used CreateKeyPair to create the key pair:
	//   - For RSA key pairs, the key fingerprint is the SHA-1 digest of the DER
	//   encoded private key.
	//   - For ED25519 key pairs, the key fingerprint is the base64-encoded SHA-256
	//   digest, which is the default for OpenSSH, starting with OpenSSH 6.8 (http://www.openssh.com/txt/release-6.8)
	//   .
	// If you used ImportKeyPair to provide Amazon Web Services the public key:
	//   - For RSA key pairs, the key fingerprint is the MD5 public key fingerprint as
	//   specified in section 4 of RFC4716.
	//   - For ED25519 key pairs, the key fingerprint is the base64-encoded SHA-256
	//   digest, which is the default for OpenSSH, starting with OpenSSH 6.8 (http://www.openssh.com/txt/release-6.8)
	//   .
	KeyFingerprint *string

	// The name of the key pair.
	KeyName *string

	// The ID of the key pair.
	KeyPairId *string

	// The type of key pair.
	KeyType KeyType

	// The public key material.
	PublicKey *string

	// Any tags applied to the key pair.
	Tags []Tag

	noSmithyDocumentSerde
}

// The last error that occurred for a VPC endpoint.
type LastError struct {

	// The error code for the VPC endpoint error.
	Code *string

	// The error message for the VPC endpoint error.
	Message *string

	noSmithyDocumentSerde
}

// Describes a launch permission.
type LaunchPermission struct {

	// The name of the group.
	Group PermissionGroup

	// The Amazon Resource Name (ARN) of an organization.
	OrganizationArn *string

	// The Amazon Resource Name (ARN) of an organizational unit (OU).
	OrganizationalUnitArn *string

	// The Amazon Web Services account ID. Constraints: Up to 10 000 account IDs can
	// be specified in a single request.
	UserId *string

	noSmithyDocumentSerde
}

// Describes a launch permission modification.
type LaunchPermissionModifications struct {

	// The Amazon Web Services account ID, organization ARN, or OU ARN to add to the
	// list of launch permissions for the AMI.
	Add []LaunchPermission

	// The Amazon Web Services account ID, organization ARN, or OU ARN to remove from
	// the list of launch permissions for the AMI.
	Remove []LaunchPermission

	noSmithyDocumentSerde
}

// Describes the launch specification for an instance.
type LaunchSpecification struct {

	// Deprecated.
	AddressingType *string

	// The block device mapping entries.
	BlockDeviceMappings []BlockDeviceMapping

	// Indicates whether the instance is optimized for EBS I/O. This optimization
	// provides dedicated throughput to Amazon EBS and an optimized configuration stack
	// to provide optimal EBS I/O performance. This optimization isn't available with
	// all instance types. Additional usage charges apply when using an EBS Optimized
	// instance. Default: false
	EbsOptimized *bool

	// The IAM instance profile.
	IamInstanceProfile *IamInstanceProfileSpecification

	// The ID of the AMI.
	ImageId *string

	// The instance type. Only one instance type can be specified.
	InstanceType InstanceType

	// The ID of the kernel.
	KernelId *string

	// The name of the key pair.
	KeyName *string

	// Describes the monitoring of an instance.
	Monitoring *RunInstancesMonitoringEnabled

	// The network interfaces. If you specify a network interface, you must specify
	// subnet IDs and security group IDs using the network interface.
	NetworkInterfaces []InstanceNetworkInterfaceSpecification

	// The placement information for the instance.
	Placement *SpotPlacement

	// The ID of the RAM disk.
	RamdiskId *string

	// The IDs of the security groups.
	SecurityGroups []GroupIdentifier

	// The ID of the subnet in which to launch the instance.
	SubnetId *string

	// The base64-encoded user data that instances use when starting up. User data is
	// limited to 16 KB.
	UserData *string

	noSmithyDocumentSerde
}

// Describes a launch template.
type LaunchTemplate struct {

	// The time launch template was created.
	CreateTime *time.Time

	// The principal that created the launch template.
	CreatedBy *string

	// The version number of the default version of the launch template.
	DefaultVersionNumber *int64

	// The version number of the latest version of the launch template.
	LatestVersionNumber *int64

	// The ID of the launch template.
	LaunchTemplateId *string

	// The name of the launch template.
	LaunchTemplateName *string

	// The tags for the launch template.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes a launch template and overrides.
type LaunchTemplateAndOverridesResponse struct {

	// The launch template.
	LaunchTemplateSpecification *FleetLaunchTemplateSpecification

	// Any parameters that you specify override the same parameters in the launch
	// template.
	Overrides *FleetLaunchTemplateOverrides

	noSmithyDocumentSerde
}

// Describes a block device mapping.
type LaunchTemplateBlockDeviceMapping struct {

	// The device name.
	DeviceName *string

	// Information about the block device for an EBS volume.
	Ebs *LaunchTemplateEbsBlockDevice

	// To omit the device from the block device mapping, specify an empty string.
	NoDevice *string

	// The virtual device name (ephemeralN).
	VirtualName *string

	noSmithyDocumentSerde
}

// Describes a block device mapping.
type LaunchTemplateBlockDeviceMappingRequest struct {

	// The device name (for example, /dev/sdh or xvdh).
	DeviceName *string

	// Parameters used to automatically set up EBS volumes when the instance is
	// launched.
	Ebs *LaunchTemplateEbsBlockDeviceRequest

	// To omit the device from the block device mapping, specify an empty string.
	NoDevice *string

	// The virtual device name (ephemeralN). Instance store volumes are numbered
	// starting from 0. An instance type with 2 available instance store volumes can
	// specify mappings for ephemeral0 and ephemeral1. The number of available instance
	// store volumes depends on the instance type. After you connect to the instance,
	// you must mount the volume.
	VirtualName *string

	noSmithyDocumentSerde
}

// Describes an instance's Capacity Reservation targeting option. You can specify
// only one option at a time. Use the CapacityReservationPreference parameter to
// configure the instance to run in On-Demand capacity or to run in any open
// Capacity Reservation that has matching attributes (instance type, platform,
// Availability Zone). Use the CapacityReservationTarget parameter to explicitly
// target a specific Capacity Reservation or a Capacity Reservation group.
type LaunchTemplateCapacityReservationSpecificationRequest struct {

	// Indicates the instance's Capacity Reservation preferences. Possible preferences
	// include:
	//   - open - The instance can run in any open Capacity Reservation that has
	//   matching attributes (instance type, platform, Availability Zone).
	//   - none - The instance avoids running in a Capacity Reservation even if one is
	//   available. The instance runs in On-Demand capacity.
	CapacityReservationPreference CapacityReservationPreference

	// Information about the target Capacity Reservation or Capacity Reservation group.
	CapacityReservationTarget *CapacityReservationTarget

	noSmithyDocumentSerde
}

// Information about the Capacity Reservation targeting option.
type LaunchTemplateCapacityReservationSpecificationResponse struct {

	// Indicates the instance's Capacity Reservation preferences. Possible preferences
	// include:
	//   - open - The instance can run in any open Capacity Reservation that has
	//   matching attributes (instance type, platform, Availability Zone).
	//   - none - The instance avoids running in a Capacity Reservation even if one is
	//   available. The instance runs in On-Demand capacity.
	CapacityReservationPreference CapacityReservationPreference

	// Information about the target Capacity Reservation or Capacity Reservation group.
	CapacityReservationTarget *CapacityReservationTargetResponse

	noSmithyDocumentSerde
}

// Describes a launch template and overrides.
type LaunchTemplateConfig struct {

	// The launch template to use. Make sure that the launch template does not contain
	// the NetworkInterfaceId parameter because you can't specify a network interface
	// ID in a Spot Fleet.
	LaunchTemplateSpecification *FleetLaunchTemplateSpecification

	// Any parameters that you specify override the same parameters in the launch
	// template.
	Overrides []LaunchTemplateOverrides

	noSmithyDocumentSerde
}

// The CPU options for the instance.
type LaunchTemplateCpuOptions struct {

	// Indicates whether the instance is enabled for AMD SEV-SNP. For more
	// information, see AMD SEV-SNP (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html)
	// .
	AmdSevSnp AmdSevSnpSpecification

	// The number of CPU cores for the instance.
	CoreCount *int32

	// The number of threads per CPU core.
	ThreadsPerCore *int32

	noSmithyDocumentSerde
}

// The CPU options for the instance. Both the core count and threads per core must
// be specified in the request.
type LaunchTemplateCpuOptionsRequest struct {

	// Indicates whether to enable the instance for AMD SEV-SNP. AMD SEV-SNP is
	// supported with M6a, R6a, and C6a instance types only. For more information, see
	// AMD SEV-SNP (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html) .
	AmdSevSnp AmdSevSnpSpecification

	// The number of CPU cores for the instance.
	CoreCount *int32

	// The number of threads per CPU core. To disable multithreading for the instance,
	// specify a value of 1 . Otherwise, specify the default value of 2 .
	ThreadsPerCore *int32

	noSmithyDocumentSerde
}

// Describes a block device for an EBS volume.
type LaunchTemplateEbsBlockDevice struct {

	// Indicates whether the EBS volume is deleted on instance termination.
	DeleteOnTermination *bool

	// Indicates whether the EBS volume is encrypted.
	Encrypted *bool

	// The number of I/O operations per second (IOPS) that the volume supports.
	Iops *int32

	// The ARN of the Key Management Service (KMS) CMK used for encryption.
	KmsKeyId *string

	// The ID of the snapshot.
	SnapshotId *string

	// The throughput that the volume supports, in MiB/s.
	Throughput *int32

	// The size of the volume, in GiB.
	VolumeSize *int32

	// The volume type.
	VolumeType VolumeType

	noSmithyDocumentSerde
}

// The parameters for a block device for an EBS volume.
type LaunchTemplateEbsBlockDeviceRequest struct {

	// Indicates whether the EBS volume is deleted on instance termination.
	DeleteOnTermination *bool

	// Indicates whether the EBS volume is encrypted. Encrypted volumes can only be
	// attached to instances that support Amazon EBS encryption. If you are creating a
	// volume from a snapshot, you can't specify an encryption value.
	Encrypted *bool

	// The number of I/O operations per second (IOPS). For gp3 , io1 , and io2
	// volumes, this represents the number of IOPS that are provisioned for the volume.
	// For gp2 volumes, this represents the baseline performance of the volume and the
	// rate at which the volume accumulates I/O credits for bursting. The following are
	// the supported values for each volume type:
	//   - gp3 : 3,000 - 16,000 IOPS
	//   - io1 : 100 - 64,000 IOPS
	//   - io2 : 100 - 256,000 IOPS
	// For io2 volumes, you can achieve up to 256,000 IOPS on instances built on the
	// Nitro System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)
	// . On other instances, you can achieve performance up to 32,000 IOPS. This
	// parameter is supported for io1 , io2 , and gp3 volumes only.
	Iops *int32

	// The ARN of the symmetric Key Management Service (KMS) CMK used for encryption.
	KmsKeyId *string

	// The ID of the snapshot.
	SnapshotId *string

	// The throughput to provision for a gp3 volume, with a maximum of 1,000 MiB/s.
	// Valid Range: Minimum value of 125. Maximum value of 1000.
	Throughput *int32

	// The size of the volume, in GiBs. You must specify either a snapshot ID or a
	// volume size. The following are the supported volumes sizes for each volume type:
	//
	//   - gp2 and gp3 : 1 - 16,384 GiB
	//   - io1 : 4 - 16,384 GiB
	//   - io2 : 4 - 65,536 GiB
	//   - st1 and sc1 : 125 - 16,384 GiB
	//   - standard : 1 - 1024 GiB
	VolumeSize *int32

	// The volume type. For more information, see Amazon EBS volume types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	VolumeType VolumeType

	noSmithyDocumentSerde
}

// Describes an elastic inference accelerator.
type LaunchTemplateElasticInferenceAccelerator struct {

	// The type of elastic inference accelerator. The possible values are eia1.medium,
	// eia1.large, and eia1.xlarge.
	//
	// This member is required.
	Type *string

	// The number of elastic inference accelerators to attach to the instance.
	// Default: 1
	Count *int32

	noSmithyDocumentSerde
}

// Describes an elastic inference accelerator.
type LaunchTemplateElasticInferenceAcceleratorResponse struct {

	// The number of elastic inference accelerators to attach to the instance.
	// Default: 1
	Count *int32

	// The type of elastic inference accelerator. The possible values are eia1.medium,
	// eia1.large, and eia1.xlarge.
	Type *string

	noSmithyDocumentSerde
}

// ENA Express uses Amazon Web Services Scalable Reliable Datagram (SRD)
// technology to increase the maximum bandwidth used per stream and minimize tail
// latency of network traffic between EC2 instances. With ENA Express, you can
// communicate between two EC2 instances in the same subnet within the same
// account, or in different accounts. Both sending and receiving instances must
// have ENA Express enabled. To improve the reliability of network packet delivery,
// ENA Express reorders network packets on the receiving end by default. However,
// some UDP-based applications are designed to handle network packets that are out
// of order to reduce the overhead for packet delivery at the network layer. When
// ENA Express is enabled, you can specify whether UDP network traffic uses it.
type LaunchTemplateEnaSrdSpecification struct {

	// Indicates whether ENA Express is enabled for the network interface.
	EnaSrdEnabled *bool

	// Configures ENA Express for UDP network traffic.
	EnaSrdUdpSpecification *LaunchTemplateEnaSrdUdpSpecification

	noSmithyDocumentSerde
}

// ENA Express is compatible with both TCP and UDP transport protocols. When it's
// enabled, TCP traffic automatically uses it. However, some UDP-based applications
// are designed to handle network packets that are out of order, without a need for
// retransmission, such as live video broadcasting or other near-real-time
// applications. For UDP traffic, you can specify whether to use ENA Express, based
// on your application environment needs.
type LaunchTemplateEnaSrdUdpSpecification struct {

	// Indicates whether UDP traffic to and from the instance uses ENA Express. To
	// specify this setting, you must first enable ENA Express.
	EnaSrdUdpEnabled *bool

	noSmithyDocumentSerde
}

// Indicates whether the instance is enabled for Amazon Web Services Nitro
// Enclaves.
type LaunchTemplateEnclaveOptions struct {

	// If this parameter is set to true , the instance is enabled for Amazon Web
	// Services Nitro Enclaves; otherwise, it is not enabled for Amazon Web Services
	// Nitro Enclaves.
	Enabled *bool

	noSmithyDocumentSerde
}

// Indicates whether the instance is enabled for Amazon Web Services Nitro
// Enclaves. For more information, see What is Amazon Web Services Nitro Enclaves? (https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html)
// in the Amazon Web Services Nitro Enclaves User Guide.
type LaunchTemplateEnclaveOptionsRequest struct {

	// To enable the instance for Amazon Web Services Nitro Enclaves, set this
	// parameter to true .
	Enabled *bool

	noSmithyDocumentSerde
}

// Indicates whether an instance is configured for hibernation.
type LaunchTemplateHibernationOptions struct {

	// If this parameter is set to true , the instance is enabled for hibernation;
	// otherwise, it is not enabled for hibernation.
	Configured *bool

	noSmithyDocumentSerde
}

// Indicates whether the instance is configured for hibernation. This parameter is
// valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)
// .
type LaunchTemplateHibernationOptionsRequest struct {

	// If you set this parameter to true , the instance is enabled for hibernation.
	// Default: false
	Configured *bool

	noSmithyDocumentSerde
}

// Describes an IAM instance profile.
type LaunchTemplateIamInstanceProfileSpecification struct {

	// The Amazon Resource Name (ARN) of the instance profile.
	Arn *string

	// The name of the instance profile.
	Name *string

	noSmithyDocumentSerde
}

// An IAM instance profile.
type LaunchTemplateIamInstanceProfileSpecificationRequest struct {

	// The Amazon Resource Name (ARN) of the instance profile.
	Arn *string

	// The name of the instance profile.
	Name *string

	noSmithyDocumentSerde
}

// The maintenance options of your instance.
type LaunchTemplateInstanceMaintenanceOptions struct {

	// Disables the automatic recovery behavior of your instance or sets it to default.
	AutoRecovery LaunchTemplateAutoRecoveryState

	noSmithyDocumentSerde
}

// The maintenance options of your instance.
type LaunchTemplateInstanceMaintenanceOptionsRequest struct {

	// Disables the automatic recovery behavior of your instance or sets it to
	// default. For more information, see Simplified automatic recovery (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html#instance-configuration-recovery)
	// .
	AutoRecovery LaunchTemplateAutoRecoveryState

	noSmithyDocumentSerde
}

// The market (purchasing) option for the instances.
type LaunchTemplateInstanceMarketOptions struct {

	// The market type.
	MarketType MarketType

	// The options for Spot Instances.
	SpotOptions *LaunchTemplateSpotMarketOptions

	noSmithyDocumentSerde
}

// The market (purchasing) option for the instances.
type LaunchTemplateInstanceMarketOptionsRequest struct {

	// The market type.
	MarketType MarketType

	// The options for Spot Instances.
	SpotOptions *LaunchTemplateSpotMarketOptionsRequest

	noSmithyDocumentSerde
}

// The metadata options for the instance. For more information, see Instance
// metadata and user data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)
// in the Amazon Elastic Compute Cloud User Guide.
type LaunchTemplateInstanceMetadataOptions struct {

	// Enables or disables the HTTP metadata endpoint on your instances. If the
	// parameter is not specified, the default state is enabled . If you specify a
	// value of disabled , you will not be able to access your instance metadata.
	HttpEndpoint LaunchTemplateInstanceMetadataEndpointState

	// Enables or disables the IPv6 endpoint for the instance metadata service.
	// Default: disabled
	HttpProtocolIpv6 LaunchTemplateInstanceMetadataProtocolIpv6

	// The desired HTTP PUT response hop limit for instance metadata requests. The
	// larger the number, the further instance metadata requests can travel. Default: 1
	// Possible values: Integers from 1 to 64
	HttpPutResponseHopLimit *int32

	// Indicates whether IMDSv2 is required.
	//   - optional - IMDSv2 is optional. You can choose whether to send a session
	//   token in your instance metadata retrieval requests. If you retrieve IAM role
	//   credentials without a session token, you receive the IMDSv1 role credentials. If
	//   you retrieve IAM role credentials using a valid session token, you receive the
	//   IMDSv2 role credentials.
	//   - required - IMDSv2 is required. You must send a session token in your
	//   instance metadata retrieval requests. With this option, retrieving the IAM role
	//   credentials always returns IMDSv2 credentials; IMDSv1 credentials are not
	//   available.
	HttpTokens LaunchTemplateHttpTokensState

	// Set to enabled to allow access to instance tags from the instance metadata. Set
	// to disabled to turn off access to instance tags from the instance metadata. For
	// more information, see Work with instance tags using the instance metadata (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS)
	// . Default: disabled
	InstanceMetadataTags LaunchTemplateInstanceMetadataTagsState

	// The state of the metadata option changes. pending - The metadata options are
	// being updated and the instance is not ready to process metadata traffic with the
	// new selection. applied - The metadata options have been successfully applied on
	// the instance.
	State LaunchTemplateInstanceMetadataOptionsState

	noSmithyDocumentSerde
}

// The metadata options for the instance. For more information, see Instance
// metadata and user data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)
// in the Amazon Elastic Compute Cloud User Guide.
type LaunchTemplateInstanceMetadataOptionsRequest struct {

	// Enables or disables the HTTP metadata endpoint on your instances. If the
	// parameter is not specified, the default state is enabled . If you specify a
	// value of disabled , you will not be able to access your instance metadata.
	HttpEndpoint LaunchTemplateInstanceMetadataEndpointState

	// Enables or disables the IPv6 endpoint for the instance metadata service.
	// Default: disabled
	HttpProtocolIpv6 LaunchTemplateInstanceMetadataProtocolIpv6

	// The desired HTTP PUT response hop limit for instance metadata requests. The
	// larger the number, the further instance metadata requests can travel. Default: 1
	// Possible values: Integers from 1 to 64
	HttpPutResponseHopLimit *int32

	// Indicates whether IMDSv2 is required.
	//   - optional - IMDSv2 is optional. You can choose whether to send a session
	//   token in your instance metadata retrieval requests. If you retrieve IAM role
	//   credentials without a session token, you receive the IMDSv1 role credentials. If
	//   you retrieve IAM role credentials using a valid session token, you receive the
	//   IMDSv2 role credentials.
	//   - required - IMDSv2 is required. You must send a session token in your
	//   instance metadata retrieval requests. With this option, retrieving the IAM role
	//   credentials always returns IMDSv2 credentials; IMDSv1 credentials are not
	//   available.
	// Default: If the value of ImdsSupport for the Amazon Machine Image (AMI) for
	// your instance is v2.0 , the default is required .
	HttpTokens LaunchTemplateHttpTokensState

	// Set to enabled to allow access to instance tags from the instance metadata. Set
	// to disabled to turn off access to instance tags from the instance metadata. For
	// more information, see Work with instance tags using the instance metadata (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#work-with-tags-in-IMDS)
	// . Default: disabled
	InstanceMetadataTags LaunchTemplateInstanceMetadataTagsState

	noSmithyDocumentSerde
}

// Describes a network interface.
type LaunchTemplateInstanceNetworkInterfaceSpecification struct {

	// Indicates whether to associate a Carrier IP address with eth0 for a new network
	// interface. Use this option when you launch an instance in a Wavelength Zone and
	// want to associate a Carrier IP address with the network interface. For more
	// information about Carrier IP addresses, see Carrier IP addresses (https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip)
	// in the Wavelength Developer Guide.
	AssociateCarrierIpAddress *bool

	// Indicates whether to associate a public IPv4 address with eth0 for a new
	// network interface. Starting on February 1, 2024, Amazon Web Services will charge
	// for all public IPv4 addresses, including public IPv4 addresses associated with
	// running instances and Elastic IP addresses. For more information, see the Public
	// IPv4 Address tab on the Amazon VPC pricing page (http://aws.amazon.com/vpc/pricing/)
	// .
	AssociatePublicIpAddress *bool

	// A security group connection tracking specification that enables you to set the
	// timeout for connection tracking on an Elastic network interface. For more
	// information, see Connection tracking timeouts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts)
	// in the Amazon Elastic Compute Cloud User Guide.
	ConnectionTrackingSpecification *ConnectionTrackingSpecification

	// Indicates whether the network interface is deleted when the instance is
	// terminated.
	DeleteOnTermination *bool

	// A description for the network interface.
	Description *string

	// The device index for the network interface attachment.
	DeviceIndex *int32

	// Contains the ENA Express settings for instances launched from your launch
	// template.
	EnaSrdSpecification *LaunchTemplateEnaSrdSpecification

	// The IDs of one or more security groups.
	Groups []string

	// The type of network interface.
	InterfaceType *string

	// The number of IPv4 prefixes that Amazon Web Services automatically assigned to
	// the network interface.
	Ipv4PrefixCount *int32

	// One or more IPv4 prefixes assigned to the network interface.
	Ipv4Prefixes []Ipv4PrefixSpecificationResponse

	// The number of IPv6 addresses for the network interface.
	Ipv6AddressCount *int32

	// The IPv6 addresses for the network interface.
	Ipv6Addresses []InstanceIpv6Address

	// The number of IPv6 prefixes that Amazon Web Services automatically assigned to
	// the network interface.
	Ipv6PrefixCount *int32

	// One or more IPv6 prefixes assigned to the network interface.
	Ipv6Prefixes []Ipv6PrefixSpecificationResponse

	// The index of the network card.
	NetworkCardIndex *int32

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The primary IPv6 address of the network interface. When you enable an IPv6 GUA
	// address to be a primary IPv6, the first IPv6 GUA will be made the primary IPv6
	// address until the instance is terminated or the network interface is detached.
	// For more information about primary IPv6 addresses, see RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// .
	PrimaryIpv6 *bool

	// The primary private IPv4 address of the network interface.
	PrivateIpAddress *string

	// One or more private IPv4 addresses.
	PrivateIpAddresses []PrivateIpAddressSpecification

	// The number of secondary private IPv4 addresses for the network interface.
	SecondaryPrivateIpAddressCount *int32

	// The ID of the subnet for the network interface.
	SubnetId *string

	noSmithyDocumentSerde
}

// The parameters for a network interface.
type LaunchTemplateInstanceNetworkInterfaceSpecificationRequest struct {

	// Associates a Carrier IP address with eth0 for a new network interface. Use this
	// option when you launch an instance in a Wavelength Zone and want to associate a
	// Carrier IP address with the network interface. For more information about
	// Carrier IP addresses, see Carrier IP addresses (https://docs.aws.amazon.com/wavelength/latest/developerguide/how-wavelengths-work.html#provider-owned-ip)
	// in the Wavelength Developer Guide.
	AssociateCarrierIpAddress *bool

	// Associates a public IPv4 address with eth0 for a new network interface.
	// Starting on February 1, 2024, Amazon Web Services will charge for all public
	// IPv4 addresses, including public IPv4 addresses associated with running
	// instances and Elastic IP addresses. For more information, see the Public IPv4
	// Address tab on the Amazon VPC pricing page (http://aws.amazon.com/vpc/pricing/) .
	AssociatePublicIpAddress *bool

	// A security group connection tracking specification that enables you to set the
	// timeout for connection tracking on an Elastic network interface. For more
	// information, see Connection tracking timeouts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts)
	// in the Amazon Elastic Compute Cloud User Guide.
	ConnectionTrackingSpecification *ConnectionTrackingSpecificationRequest

	// Indicates whether the network interface is deleted when the instance is
	// terminated.
	DeleteOnTermination *bool

	// A description for the network interface.
	Description *string

	// The device index for the network interface attachment.
	DeviceIndex *int32

	// Configure ENA Express settings for your launch template.
	EnaSrdSpecification *EnaSrdSpecificationRequest

	// The IDs of one or more security groups.
	Groups []string

	// The type of network interface. To create an Elastic Fabric Adapter (EFA),
	// specify efa . For more information, see Elastic Fabric Adapter (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html)
	// in the Amazon Elastic Compute Cloud User Guide. If you are not creating an EFA,
	// specify interface or omit this parameter. Valid values: interface | efa
	InterfaceType *string

	// The number of IPv4 prefixes to be automatically assigned to the network
	// interface. You cannot use this option if you use the Ipv4Prefix option.
	Ipv4PrefixCount *int32

	// One or more IPv4 prefixes to be assigned to the network interface. You cannot
	// use this option if you use the Ipv4PrefixCount option.
	Ipv4Prefixes []Ipv4PrefixSpecificationRequest

	// The number of IPv6 addresses to assign to a network interface. Amazon EC2
	// automatically selects the IPv6 addresses from the subnet range. You can't use
	// this option if specifying specific IPv6 addresses.
	Ipv6AddressCount *int32

	// One or more specific IPv6 addresses from the IPv6 CIDR block range of your
	// subnet. You can't use this option if you're specifying a number of IPv6
	// addresses.
	Ipv6Addresses []InstanceIpv6AddressRequest

	// The number of IPv6 prefixes to be automatically assigned to the network
	// interface. You cannot use this option if you use the Ipv6Prefix option.
	Ipv6PrefixCount *int32

	// One or more IPv6 prefixes to be assigned to the network interface. You cannot
	// use this option if you use the Ipv6PrefixCount option.
	Ipv6Prefixes []Ipv6PrefixSpecificationRequest

	// The index of the network card. Some instance types support multiple network
	// cards. The primary network interface must be assigned to network card index 0.
	// The default is network card index 0.
	NetworkCardIndex *int32

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The primary IPv6 address of the network interface. When you enable an IPv6 GUA
	// address to be a primary IPv6, the first IPv6 GUA will be made the primary IPv6
	// address until the instance is terminated or the network interface is detached.
	// For more information about primary IPv6 addresses, see RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// .
	PrimaryIpv6 *bool

	// The primary private IPv4 address of the network interface.
	PrivateIpAddress *string

	// One or more private IPv4 addresses.
	PrivateIpAddresses []PrivateIpAddressSpecification

	// The number of secondary private IPv4 addresses to assign to a network interface.
	SecondaryPrivateIpAddressCount *int32

	// The ID of the subnet for the network interface.
	SubnetId *string

	noSmithyDocumentSerde
}

// Describes a license configuration.
type LaunchTemplateLicenseConfiguration struct {

	// The Amazon Resource Name (ARN) of the license configuration.
	LicenseConfigurationArn *string

	noSmithyDocumentSerde
}

// Describes a license configuration.
type LaunchTemplateLicenseConfigurationRequest struct {

	// The Amazon Resource Name (ARN) of the license configuration.
	LicenseConfigurationArn *string

	noSmithyDocumentSerde
}

// Describes overrides for a launch template.
type LaunchTemplateOverrides struct {

	// The Availability Zone in which to launch the instances.
	AvailabilityZone *string

	// The instance requirements. When you specify instance requirements, Amazon EC2
	// will identify instance types with the provided requirements, and then use your
	// On-Demand and Spot allocation strategies to launch instances from these instance
	// types, in the same way as when you specify a list of instance types. If you
	// specify InstanceRequirements , you can't specify InstanceType .
	InstanceRequirements *InstanceRequirements

	// The instance type.
	InstanceType InstanceType

	// The priority for the launch template override. The highest priority is launched
	// first. If OnDemandAllocationStrategy is set to prioritized , Spot Fleet uses
	// priority to determine which launch template override to use first in fulfilling
	// On-Demand capacity. If the Spot AllocationStrategy is set to
	// capacityOptimizedPrioritized , Spot Fleet uses priority on a best-effort basis
	// to determine which launch template override to use in fulfilling Spot capacity,
	// but optimizes for capacity first. Valid values are whole numbers starting at 0 .
	// The lower the number, the higher the priority. If no number is set, the launch
	// template override has the lowest priority. You can set the same priority for
	// different launch template overrides.
	Priority *float64

	// The maximum price per unit hour that you are willing to pay for a Spot
	// Instance. We do not recommend using this parameter because it can lead to
	// increased interruptions. If you do not specify this parameter, you will pay the
	// current Spot price. If you specify a maximum price, your instances will be
	// interrupted more frequently than if you do not specify this parameter.
	SpotPrice *string

	// The ID of the subnet in which to launch the instances.
	SubnetId *string

	// The number of units provided by the specified instance type.
	WeightedCapacity *float64

	noSmithyDocumentSerde
}

// Describes the placement of an instance.
type LaunchTemplatePlacement struct {

	// The affinity setting for the instance on the Dedicated Host.
	Affinity *string

	// The Availability Zone of the instance.
	AvailabilityZone *string

	// The Group ID of the placement group. You must specify the Placement Group Group
	// ID to launch an instance in a shared placement group.
	GroupId *string

	// The name of the placement group for the instance.
	GroupName *string

	// The ID of the Dedicated Host for the instance.
	HostId *string

	// The ARN of the host resource group in which to launch the instances.
	HostResourceGroupArn *string

	// The number of the partition the instance should launch in. Valid only if the
	// placement group strategy is set to partition .
	PartitionNumber *int32

	// Reserved for future use.
	SpreadDomain *string

	// The tenancy of the instance. An instance with a tenancy of dedicated runs on
	// single-tenant hardware.
	Tenancy Tenancy

	noSmithyDocumentSerde
}

// Describes the placement of an instance.
type LaunchTemplatePlacementRequest struct {

	// The affinity setting for an instance on a Dedicated Host.
	Affinity *string

	// The Availability Zone for the instance.
	AvailabilityZone *string

	// The Group Id of a placement group. You must specify the Placement Group Group
	// Id to launch an instance in a shared placement group.
	GroupId *string

	// The name of the placement group for the instance.
	GroupName *string

	// The ID of the Dedicated Host for the instance.
	HostId *string

	// The ARN of the host resource group in which to launch the instances. If you
	// specify a host resource group ARN, omit the Tenancy parameter or set it to host .
	HostResourceGroupArn *string

	// The number of the partition the instance should launch in. Valid only if the
	// placement group strategy is set to partition .
	PartitionNumber *int32

	// Reserved for future use.
	SpreadDomain *string

	// The tenancy of the instance. An instance with a tenancy of dedicated runs on
	// single-tenant hardware.
	Tenancy Tenancy

	noSmithyDocumentSerde
}

// Describes the options for instance hostnames.
type LaunchTemplatePrivateDnsNameOptions struct {

	// Indicates whether to respond to DNS queries for instance hostnames with DNS
	// AAAA records.
	EnableResourceNameDnsAAAARecord *bool

	// Indicates whether to respond to DNS queries for instance hostnames with DNS A
	// records.
	EnableResourceNameDnsARecord *bool

	// The type of hostname to assign to an instance.
	HostnameType HostnameType

	noSmithyDocumentSerde
}

// Describes the options for instance hostnames.
type LaunchTemplatePrivateDnsNameOptionsRequest struct {

	// Indicates whether to respond to DNS queries for instance hostnames with DNS
	// AAAA records.
	EnableResourceNameDnsAAAARecord *bool

	// Indicates whether to respond to DNS queries for instance hostnames with DNS A
	// records.
	EnableResourceNameDnsARecord *bool

	// The type of hostname for Amazon EC2 instances. For IPv4 only subnets, an
	// instance DNS name must be based on the instance IPv4 address. For IPv6 native
	// subnets, an instance DNS name must be based on the instance ID. For dual-stack
	// subnets, you can specify whether DNS names use the instance IPv4 address or the
	// instance ID.
	HostnameType HostnameType

	noSmithyDocumentSerde
}

// Describes the monitoring for the instance.
type LaunchTemplatesMonitoring struct {

	// Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring
	// is enabled.
	Enabled *bool

	noSmithyDocumentSerde
}

// Describes the monitoring for the instance.
type LaunchTemplatesMonitoringRequest struct {

	// Specify true to enable detailed monitoring. Otherwise, basic monitoring is
	// enabled.
	Enabled *bool

	noSmithyDocumentSerde
}

// The launch template to use. You must specify either the launch template ID or
// launch template name in the request, but not both.
type LaunchTemplateSpecification struct {

	// The ID of the launch template. You must specify the LaunchTemplateId or the
	// LaunchTemplateName , but not both.
	LaunchTemplateId *string

	// The name of the launch template. You must specify the LaunchTemplateName or the
	// LaunchTemplateId , but not both.
	LaunchTemplateName *string

	// The launch template version number, $Latest , or $Default . If the value is
	// $Latest , Amazon EC2 uses the latest version of the launch template. If the
	// value is $Default , Amazon EC2 uses the default version of the launch template.
	// Default: The default version of the launch template.
	Version *string

	noSmithyDocumentSerde
}

// The options for Spot Instances.
type LaunchTemplateSpotMarketOptions struct {

	// The required duration for the Spot Instances (also known as Spot blocks), in
	// minutes. This value must be a multiple of 60 (60, 120, 180, 240, 300, or 360).
	BlockDurationMinutes *int32

	// The behavior when a Spot Instance is interrupted.
	InstanceInterruptionBehavior InstanceInterruptionBehavior

	// The maximum hourly price you're willing to pay for the Spot Instances. We do
	// not recommend using this parameter because it can lead to increased
	// interruptions. If you do not specify this parameter, you will pay the current
	// Spot price. If you specify a maximum price, your Spot Instances will be
	// interrupted more frequently than if you do not specify this parameter.
	MaxPrice *string

	// The Spot Instance request type.
	SpotInstanceType SpotInstanceType

	// The end date of the request. For a one-time request, the request remains active
	// until all instances launch, the request is canceled, or this date is reached. If
	// the request is persistent, it remains active until it is canceled or this date
	// and time is reached.
	ValidUntil *time.Time

	noSmithyDocumentSerde
}

// The options for Spot Instances.
type LaunchTemplateSpotMarketOptionsRequest struct {

	// Deprecated.
	BlockDurationMinutes *int32

	// The behavior when a Spot Instance is interrupted. The default is terminate .
	InstanceInterruptionBehavior InstanceInterruptionBehavior

	// The maximum hourly price you're willing to pay for the Spot Instances. We do
	// not recommend using this parameter because it can lead to increased
	// interruptions. If you do not specify this parameter, you will pay the current
	// Spot price. If you specify a maximum price, your Spot Instances will be
	// interrupted more frequently than if you do not specify this parameter.
	MaxPrice *string

	// The Spot Instance request type.
	SpotInstanceType SpotInstanceType

	// The end date of the request, in UTC format (YYYY-MM-DDTHH:MM:SSZ). Supported
	// only for persistent requests.
	//   - For a persistent request, the request remains active until the ValidUntil
	//   date and time is reached. Otherwise, the request remains active until you cancel
	//   it.
	//   - For a one-time request, ValidUntil is not supported. The request remains
	//   active until all instances launch or you cancel the request.
	// Default: 7 days from the current date
	ValidUntil *time.Time

	noSmithyDocumentSerde
}

// The tags specification for the launch template.
type LaunchTemplateTagSpecification struct {

	// The type of resource to tag.
	ResourceType ResourceType

	// The tags for the resource.
	Tags []Tag

	noSmithyDocumentSerde
}

// The tags specification for the resources that are created during instance
// launch.
type LaunchTemplateTagSpecificationRequest struct {

	// The type of resource to tag. Valid Values lists all resource types for Amazon
	// EC2 that can be tagged. When you create a launch template, you can specify tags
	// for the following resource types only: instance | volume | network-interface |
	// spot-instances-request . If the instance does not include the resource type that
	// you specify, the instance launch fails. For example, not all instance types
	// include a volume. To tag a resource after it has been created, see CreateTags (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateTags.html)
	// .
	ResourceType ResourceType

	// The tags to apply to the resource.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes a launch template version.
type LaunchTemplateVersion struct {

	// The time the version was created.
	CreateTime *time.Time

	// The principal that created the version.
	CreatedBy *string

	// Indicates whether the version is the default version.
	DefaultVersion *bool

	// Information about the launch template.
	LaunchTemplateData *ResponseLaunchTemplateData

	// The ID of the launch template.
	LaunchTemplateId *string

	// The name of the launch template.
	LaunchTemplateName *string

	// The description for the version.
	VersionDescription *string

	// The version number.
	VersionNumber *int64

	noSmithyDocumentSerde
}

// Describes a license configuration.
type LicenseConfiguration struct {

	// The Amazon Resource Name (ARN) of the license configuration.
	LicenseConfigurationArn *string

	noSmithyDocumentSerde
}

// Describes a license configuration.
type LicenseConfigurationRequest struct {

	// The Amazon Resource Name (ARN) of the license configuration.
	LicenseConfigurationArn *string

	noSmithyDocumentSerde
}

// Describes the Classic Load Balancers and target groups to attach to a Spot
// Fleet request.
type LoadBalancersConfig struct {

	// The Classic Load Balancers.
	ClassicLoadBalancersConfig *ClassicLoadBalancersConfig

	// The target groups.
	TargetGroupsConfig *TargetGroupsConfig

	noSmithyDocumentSerde
}

// Describes a load permission.
type LoadPermission struct {

	// The name of the group.
	Group PermissionGroup

	// The Amazon Web Services account ID.
	UserId *string

	noSmithyDocumentSerde
}

// Describes modifications to the load permissions of an Amazon FPGA image (AFI).
type LoadPermissionModifications struct {

	// The load permissions to add.
	Add []LoadPermissionRequest

	// The load permissions to remove.
	Remove []LoadPermissionRequest

	noSmithyDocumentSerde
}

// Describes a load permission.
type LoadPermissionRequest struct {

	// The name of the group.
	Group PermissionGroup

	// The Amazon Web Services account ID.
	UserId *string

	noSmithyDocumentSerde
}

// Describes a local gateway.
type LocalGateway struct {

	// The ID of the local gateway.
	LocalGatewayId *string

	// The Amazon Resource Name (ARN) of the Outpost.
	OutpostArn *string

	// The ID of the Amazon Web Services account that owns the local gateway.
	OwnerId *string

	// The state of the local gateway.
	State *string

	// The tags assigned to the local gateway.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes a route for a local gateway route table.
type LocalGatewayRoute struct {

	// The ID of the customer-owned address pool.
	CoipPoolId *string

	// The CIDR block used for destination matches.
	DestinationCidrBlock *string

	// The ID of the prefix list.
	DestinationPrefixListId *string

	// The Amazon Resource Name (ARN) of the local gateway route table.
	LocalGatewayRouteTableArn *string

	// The ID of the local gateway route table.
	LocalGatewayRouteTableId *string

	// The ID of the virtual interface group.
	LocalGatewayVirtualInterfaceGroupId *string

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The ID of the Amazon Web Services account that owns the local gateway route.
	OwnerId *string

	// The state of the route.
	State LocalGatewayRouteState

	// The ID of the subnet.
	SubnetId *string

	// The route type.
	Type LocalGatewayRouteType

	noSmithyDocumentSerde
}

// Describes a local gateway route table.
type LocalGatewayRouteTable struct {

	// The ID of the local gateway.
	LocalGatewayId *string

	// The Amazon Resource Name (ARN) of the local gateway route table.
	LocalGatewayRouteTableArn *string

	// The ID of the local gateway route table.
	LocalGatewayRouteTableId *string

	// The mode of the local gateway route table.
	Mode LocalGatewayRouteTableMode

	// The Amazon Resource Name (ARN) of the Outpost.
	OutpostArn *string

	// The ID of the Amazon Web Services account that owns the local gateway route
	// table.
	OwnerId *string

	// The state of the local gateway route table.
	State *string

	// Information about the state change.
	StateReason *StateReason

	// The tags assigned to the local gateway route table.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes an association between a local gateway route table and a virtual
// interface group.
type LocalGatewayRouteTableVirtualInterfaceGroupAssociation struct {

	// The ID of the local gateway.
	LocalGatewayId *string

	// The Amazon Resource Name (ARN) of the local gateway route table for the virtual
	// interface group.
	LocalGatewayRouteTableArn *string

	// The ID of the local gateway route table.
	LocalGatewayRouteTableId *string

	// The ID of the association.
	LocalGatewayRouteTableVirtualInterfaceGroupAssociationId *string

	// The ID of the virtual interface group.
	LocalGatewayVirtualInterfaceGroupId *string

	// The ID of the Amazon Web Services account that owns the local gateway virtual
	// interface group association.
	OwnerId *string

	// The state of the association.
	State *string

	// The tags assigned to the association.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes an association between a local gateway route table and a VPC.
type LocalGatewayRouteTableVpcAssociation struct {

	// The ID of the local gateway.
	LocalGatewayId *string

	// The Amazon Resource Name (ARN) of the local gateway route table for the
	// association.
	LocalGatewayRouteTableArn *string

	// The ID of the local gateway route table.
	LocalGatewayRouteTableId *string

	// The ID of the association.
	LocalGatewayRouteTableVpcAssociationId *string

	// The ID of the Amazon Web Services account that owns the local gateway route
	// table for the association.
	OwnerId *string

	// The state of the association.
	State *string

	// The tags assigned to the association.
	Tags []Tag

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes a local gateway virtual interface.
type LocalGatewayVirtualInterface struct {

	// The local address.
	LocalAddress *string

	// The Border Gateway Protocol (BGP) Autonomous System Number (ASN) of the local
	// gateway.
	LocalBgpAsn *int32

	// The ID of the local gateway.
	LocalGatewayId *string

	// The ID of the virtual interface.
	LocalGatewayVirtualInterfaceId *string

	// The ID of the Amazon Web Services account that owns the local gateway virtual
	// interface.
	OwnerId *string

	// The peer address.
	PeerAddress *string

	// The peer BGP ASN.
	PeerBgpAsn *int32

	// The tags assigned to the virtual interface.
	Tags []Tag

	// The ID of the VLAN.
	Vlan *int32

	noSmithyDocumentSerde
}

// Describes a local gateway virtual interface group.
type LocalGatewayVirtualInterfaceGroup struct {

	// The ID of the local gateway.
	LocalGatewayId *string

	// The ID of the virtual interface group.
	LocalGatewayVirtualInterfaceGroupId *string

	// The IDs of the virtual interfaces.
	LocalGatewayVirtualInterfaceIds []string

	// The ID of the Amazon Web Services account that owns the local gateway virtual
	// interface group.
	OwnerId *string

	// The tags assigned to the virtual interface group.
	Tags []Tag

	noSmithyDocumentSerde
}

// Information about a locked snapshot.
type LockedSnapshotsInfo struct {

	// The compliance mode cooling-off period, in hours.
	CoolOffPeriod *int32

	// The date and time at which the compliance mode cooling-off period expires, in
	// the UTC time zone ( YYYY-MM-DDThh:mm:ss.sssZ ).
	CoolOffPeriodExpiresOn *time.Time

	// The date and time at which the snapshot was locked, in the UTC time zone (
	// YYYY-MM-DDThh:mm:ss.sssZ ).
	LockCreatedOn *time.Time

	// The period of time for which the snapshot is locked, in days.
	LockDuration *int32

	// The date and time at which the lock duration started, in the UTC time zone (
	// YYYY-MM-DDThh:mm:ss.sssZ ). If you lock a snapshot that is in the pending
	// state, the lock duration starts only once the snapshot enters the completed
	// state.
	LockDurationStartTime *time.Time

	// The date and time at which the lock will expire, in the UTC time zone (
	// YYYY-MM-DDThh:mm:ss.sssZ ).
	LockExpiresOn *time.Time

	// The state of the snapshot lock. Valid states include:
	//   - compliance-cooloff - The snapshot has been locked in compliance mode but it
	//   is still within the cooling-off period. The snapshot can't be deleted, but it
	//   can be unlocked and the lock settings can be modified by users with appropriate
	//   permissions.
	//   - governance - The snapshot is locked in governance mode. The snapshot can't
	//   be deleted, but it can be unlocked and the lock settings can be modified by
	//   users with appropriate permissions.
	//   - compliance - The snapshot is locked in compliance mode and the cooling-off
	//   period has expired. The snapshot can't be unlocked or deleted. The lock duration
	//   can only be increased by users with appropriate permissions.
	//   - expired - The snapshot was locked in compliance or governance mode but the
	//   lock duration has expired. The snapshot is not locked and can be deleted.
	LockState LockState

	// The account ID of the Amazon Web Services account that owns the snapshot.
	OwnerId *string

	// The ID of the snapshot.
	SnapshotId *string

	noSmithyDocumentSerde
}

// Details for Site-to-Site VPN tunnel endpoint maintenance events.
type MaintenanceDetails struct {

	// Timestamp of last applied maintenance.
	LastMaintenanceApplied *time.Time

	// The timestamp after which Amazon Web Services will automatically apply
	// maintenance.
	MaintenanceAutoAppliedAfter *time.Time

	// Verify existence of a pending maintenance.
	PendingMaintenance *string

	noSmithyDocumentSerde
}

// Describes a managed prefix list.
type ManagedPrefixList struct {

	// The IP address version.
	AddressFamily *string

	// The maximum number of entries for the prefix list.
	MaxEntries *int32

	// The ID of the owner of the prefix list.
	OwnerId *string

	// The Amazon Resource Name (ARN) for the prefix list.
	PrefixListArn *string

	// The ID of the prefix list.
	PrefixListId *string

	// The name of the prefix list.
	PrefixListName *string

	// The current state of the prefix list.
	State PrefixListState

	// The state message.
	StateMessage *string

	// The tags for the prefix list.
	Tags []Tag

	// The version of the prefix list.
	Version *int64

	noSmithyDocumentSerde
}

// The minimum and maximum amount of memory per vCPU, in GiB.
type MemoryGiBPerVCpu struct {

	// The maximum amount of memory per vCPU, in GiB. If this parameter is not
	// specified, there is no maximum limit.
	Max *float64

	// The minimum amount of memory per vCPU, in GiB. If this parameter is not
	// specified, there is no minimum limit.
	Min *float64

	noSmithyDocumentSerde
}

// The minimum and maximum amount of memory per vCPU, in GiB.
type MemoryGiBPerVCpuRequest struct {

	// The maximum amount of memory per vCPU, in GiB. To specify no maximum limit,
	// omit this parameter.
	Max *float64

	// The minimum amount of memory per vCPU, in GiB. To specify no minimum limit,
	// omit this parameter.
	Min *float64

	noSmithyDocumentSerde
}

// Describes the memory for the instance type.
type MemoryInfo struct {

	// The size of the memory, in MiB.
	SizeInMiB *int64

	noSmithyDocumentSerde
}

// The minimum and maximum amount of memory, in MiB.
type MemoryMiB struct {

	// The maximum amount of memory, in MiB. If this parameter is not specified, there
	// is no maximum limit.
	Max *int32

	// The minimum amount of memory, in MiB. If this parameter is not specified, there
	// is no minimum limit.
	Min *int32

	noSmithyDocumentSerde
}

// The minimum and maximum amount of memory, in MiB.
type MemoryMiBRequest struct {

	// The minimum amount of memory, in MiB. To specify no minimum limit, specify 0 .
	//
	// This member is required.
	Min *int32

	// The maximum amount of memory, in MiB. To specify no maximum limit, omit this
	// parameter.
	Max *int32

	noSmithyDocumentSerde
}

// Indicates whether the network was healthy or degraded at a particular point.
// The value is aggregated from the startDate to the endDate . Currently only
// five_minutes is supported.
type MetricPoint struct {

	// The end date for the metric point. The ending time must be formatted as
	// yyyy-mm-ddThh:mm:ss . For example, 2022-06-12T12:00:00.000Z .
	EndDate *time.Time

	// The start date for the metric point. The starting date for the metric point.
	// The starting time must be formatted as yyyy-mm-ddThh:mm:ss . For example,
	// 2022-06-10T12:00:00.000Z .
	StartDate *time.Time

	// The status of the metric point.
	Status *string

	Value *float32

	noSmithyDocumentSerde
}

// The transit gateway options.
type ModifyTransitGatewayOptions struct {

	// Adds IPv4 or IPv6 CIDR blocks for the transit gateway. Must be a size /24 CIDR
	// block or larger for IPv4, or a size /64 CIDR block or larger for IPv6.
	AddTransitGatewayCidrBlocks []string

	// A private Autonomous System Number (ASN) for the Amazon side of a BGP session.
	// The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 4294967294 for
	// 32-bit ASNs. The modify ASN operation is not allowed on a transit gateway with
	// active BGP sessions. You must first delete all transit gateway attachments that
	// have BGP configured prior to modifying the ASN on the transit gateway.
	AmazonSideAsn *int64

	// The ID of the default association route table.
	AssociationDefaultRouteTableId *string

	// Enable or disable automatic acceptance of attachment requests.
	AutoAcceptSharedAttachments AutoAcceptSharedAttachmentsValue

	// Enable or disable automatic association with the default association route
	// table.
	DefaultRouteTableAssociation DefaultRouteTableAssociationValue

	// Enable or disable automatic propagation of routes to the default propagation
	// route table.
	DefaultRouteTablePropagation DefaultRouteTablePropagationValue

	// Enable or disable DNS support.
	DnsSupport DnsSupportValue

	// The ID of the default propagation route table.
	PropagationDefaultRouteTableId *string

	// Removes CIDR blocks for the transit gateway.
	RemoveTransitGatewayCidrBlocks []string

	// Enables you to reference a security group across VPCs attached to a transit
	// gateway (TGW). Use this option to simplify security group management and control
	// of instance-to-instance traffic across VPCs that are connected by transit
	// gateway. You can also use this option to migrate from VPC peering (which was the
	// only option that supported security group referencing) to transit gateways
	// (which now also support security group referencing). This option is disabled by
	// default and there are no additional costs to use this feature. For important
	// information about this feature, see Create a transit gateway (https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#create-tgw)
	// in the Amazon Web Services Transit Gateway Guide.
	SecurityGroupReferencingSupport SecurityGroupReferencingSupportValue

	// Enable or disable Equal Cost Multipath Protocol support.
	VpnEcmpSupport VpnEcmpSupportValue

	noSmithyDocumentSerde
}

// Describes the options for a VPC attachment.
type ModifyTransitGatewayVpcAttachmentRequestOptions struct {

	// Enable or disable support for appliance mode. If enabled, a traffic flow
	// between a source and destination uses the same Availability Zone for the VPC
	// attachment for the lifetime of that flow. The default is disable .
	ApplianceModeSupport ApplianceModeSupportValue

	// Enable or disable DNS support. The default is enable .
	DnsSupport DnsSupportValue

	// Enable or disable IPv6 support. The default is enable .
	Ipv6Support Ipv6SupportValue

	// Enables you to reference a security group across VPCs attached to a transit
	// gateway (TGW). Use this option to simplify security group management and control
	// of instance-to-instance traffic across VPCs that are connected by transit
	// gateway. You can also use this option to migrate from VPC peering (which was the
	// only option that supported security group referencing) to transit gateways
	// (which now also support security group referencing). This option is disabled by
	// default and there are no additional costs to use this feature. For important
	// information about this feature, see Create a transit gateway attachment to a VPC (https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#create-vpc-attachment)
	// in the Amazon Web Services Transit Gateway Guide.
	SecurityGroupReferencingSupport SecurityGroupReferencingSupportValue

	noSmithyDocumentSerde
}

// Describes the options when modifying a Verified Access endpoint with the
// network-interface type.
type ModifyVerifiedAccessEndpointEniOptions struct {

	// The IP port number.
	Port *int32

	// The IP protocol.
	Protocol VerifiedAccessEndpointProtocol

	noSmithyDocumentSerde
}

// Describes a load balancer when creating an Amazon Web Services Verified Access
// endpoint using the load-balancer type.
type ModifyVerifiedAccessEndpointLoadBalancerOptions struct {

	// The IP port number.
	Port *int32

	// The IP protocol.
	Protocol VerifiedAccessEndpointProtocol

	// The IDs of the subnets.
	SubnetIds []string

	noSmithyDocumentSerde
}

// Modifies the configuration of the specified device-based Amazon Web Services
// Verified Access trust provider.
type ModifyVerifiedAccessTrustProviderDeviceOptions struct {

	// The URL Amazon Web Services Verified Access will use to verify the authenticity
	// of the device tokens.
	PublicSigningKeyUrl *string

	noSmithyDocumentSerde
}

// Options for an OpenID Connect-compatible user-identity trust provider.
type ModifyVerifiedAccessTrustProviderOidcOptions struct {

	// The OIDC authorization endpoint.
	AuthorizationEndpoint *string

	// The client identifier.
	ClientId *string

	// The client secret.
	ClientSecret *string

	// The OIDC issuer.
	Issuer *string

	// OpenID Connect (OIDC) scopes are used by an application during authentication
	// to authorize access to a user's details. Each scope returns a specific set of
	// user attributes.
	Scope *string

	// The OIDC token endpoint.
	TokenEndpoint *string

	// The OIDC user info endpoint.
	UserInfoEndpoint *string

	noSmithyDocumentSerde
}

// The Amazon Web Services Site-to-Site VPN tunnel options to modify.
type ModifyVpnTunnelOptionsSpecification struct {

	// The action to take after DPD timeout occurs. Specify restart to restart the IKE
	// initiation. Specify clear to end the IKE session. Valid Values: clear | none |
	// restart Default: clear
	DPDTimeoutAction *string

	// The number of seconds after which a DPD timeout occurs. A DPD timeout of 40
	// seconds means that the VPN endpoint will consider the peer dead 30 seconds after
	// the first failed keep-alive. Constraints: A value greater than or equal to 30.
	// Default: 40
	DPDTimeoutSeconds *int32

	// Turn on or off tunnel endpoint lifecycle control feature.
	EnableTunnelLifecycleControl *bool

	// The IKE versions that are permitted for the VPN tunnel. Valid values: ikev1 |
	// ikev2
	IKEVersions []IKEVersionsRequestListValue

	// Options for logging VPN tunnel activity.
	LogOptions *VpnTunnelLogOptionsSpecification

	// One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel
	// for phase 1 IKE negotiations. Valid values: 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20
	// | 21 | 22 | 23 | 24
	Phase1DHGroupNumbers []Phase1DHGroupNumbersRequestListValue

	// One or more encryption algorithms that are permitted for the VPN tunnel for
	// phase 1 IKE negotiations. Valid values: AES128 | AES256 | AES128-GCM-16 |
	// AES256-GCM-16
	Phase1EncryptionAlgorithms []Phase1EncryptionAlgorithmsRequestListValue

	// One or more integrity algorithms that are permitted for the VPN tunnel for
	// phase 1 IKE negotiations. Valid values: SHA1 | SHA2-256 | SHA2-384 | SHA2-512
	Phase1IntegrityAlgorithms []Phase1IntegrityAlgorithmsRequestListValue

	// The lifetime for phase 1 of the IKE negotiation, in seconds. Constraints: A
	// value between 900 and 28,800. Default: 28800
	Phase1LifetimeSeconds *int32

	// One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel
	// for phase 2 IKE negotiations. Valid values: 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19
	// | 20 | 21 | 22 | 23 | 24
	Phase2DHGroupNumbers []Phase2DHGroupNumbersRequestListValue

	// One or more encryption algorithms that are permitted for the VPN tunnel for
	// phase 2 IKE negotiations. Valid values: AES128 | AES256 | AES128-GCM-16 |
	// AES256-GCM-16
	Phase2EncryptionAlgorithms []Phase2EncryptionAlgorithmsRequestListValue

	// One or more integrity algorithms that are permitted for the VPN tunnel for
	// phase 2 IKE negotiations. Valid values: SHA1 | SHA2-256 | SHA2-384 | SHA2-512
	Phase2IntegrityAlgorithms []Phase2IntegrityAlgorithmsRequestListValue

	// The lifetime for phase 2 of the IKE negotiation, in seconds. Constraints: A
	// value between 900 and 3,600. The value must be less than the value for
	// Phase1LifetimeSeconds . Default: 3600
	Phase2LifetimeSeconds *int32

	// The pre-shared key (PSK) to establish initial authentication between the
	// virtual private gateway and the customer gateway. Constraints: Allowed
	// characters are alphanumeric characters, periods (.), and underscores (_). Must
	// be between 8 and 64 characters in length and cannot start with zero (0).
	PreSharedKey *string

	// The percentage of the rekey window (determined by RekeyMarginTimeSeconds )
	// during which the rekey time is randomly selected. Constraints: A value between 0
	// and 100. Default: 100
	RekeyFuzzPercentage *int32

	// The margin time, in seconds, before the phase 2 lifetime expires, during which
	// the Amazon Web Services side of the VPN connection performs an IKE rekey. The
	// exact time of the rekey is randomly selected based on the value for
	// RekeyFuzzPercentage . Constraints: A value between 60 and half of
	// Phase2LifetimeSeconds . Default: 270
	RekeyMarginTimeSeconds *int32

	// The number of packets in an IKE replay window. Constraints: A value between 64
	// and 2048. Default: 1024
	ReplayWindowSize *int32

	// The action to take when the establishing the tunnel for the VPN connection. By
	// default, your customer gateway device must initiate the IKE negotiation and
	// bring up the tunnel. Specify start for Amazon Web Services to initiate the IKE
	// negotiation. Valid Values: add | start Default: add
	StartupAction *string

	// The range of inside IPv4 addresses for the tunnel. Any specified CIDR blocks
	// must be unique across all VPN connections that use the same virtual private
	// gateway. Constraints: A size /30 CIDR block from the 169.254.0.0/16 range. The
	// following CIDR blocks are reserved and cannot be used:
	//   - 169.254.0.0/30
	//   - 169.254.1.0/30
	//   - 169.254.2.0/30
	//   - 169.254.3.0/30
	//   - 169.254.4.0/30
	//   - 169.254.5.0/30
	//   - 169.254.169.252/30
	TunnelInsideCidr *string

	// The range of inside IPv6 addresses for the tunnel. Any specified CIDR blocks
	// must be unique across all VPN connections that use the same transit gateway.
	// Constraints: A size /126 CIDR block from the local fd00::/8 range.
	TunnelInsideIpv6Cidr *string

	noSmithyDocumentSerde
}

// Describes the monitoring of an instance.
type Monitoring struct {

	// Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring
	// is enabled.
	State MonitoringState

	noSmithyDocumentSerde
}

// This action is deprecated. Describes the status of a moving Elastic IP address.
type MovingAddressStatus struct {

	// The status of the Elastic IP address that's being moved or restored.
	MoveStatus MoveStatus

	// The Elastic IP address.
	PublicIp *string

	noSmithyDocumentSerde
}

// Describes a NAT gateway.
type NatGateway struct {

	// Indicates whether the NAT gateway supports public or private connectivity.
	ConnectivityType ConnectivityType

	// The date and time the NAT gateway was created.
	CreateTime *time.Time

	// The date and time the NAT gateway was deleted, if applicable.
	DeleteTime *time.Time

	// If the NAT gateway could not be created, specifies the error code for the
	// failure. ( InsufficientFreeAddressesInSubnet | Gateway.NotAttached |
	// InvalidAllocationID.NotFound | Resource.AlreadyAssociated | InternalError |
	// InvalidSubnetID.NotFound )
	FailureCode *string

	// If the NAT gateway could not be created, specifies the error message for the
	// failure, that corresponds to the error code.
	//   - For InsufficientFreeAddressesInSubnet: "Subnet has insufficient free
	//   addresses to create this NAT gateway"
	//   - For Gateway.NotAttached: "Network vpc-xxxxxxxx has no Internet gateway
	//   attached"
	//   - For InvalidAllocationID.NotFound: "Elastic IP address eipalloc-xxxxxxxx
	//   could not be associated with this NAT gateway"
	//   - For Resource.AlreadyAssociated: "Elastic IP address eipalloc-xxxxxxxx is
	//   already associated"
	//   - For InternalError: "Network interface eni-xxxxxxxx, created and used
	//   internally by this NAT gateway is in an invalid state. Please try again."
	//   - For InvalidSubnetID.NotFound: "The specified subnet subnet-xxxxxxxx does
	//   not exist or could not be found."
	FailureMessage *string

	// Information about the IP addresses and network interface associated with the
	// NAT gateway.
	NatGatewayAddresses []NatGatewayAddress

	// The ID of the NAT gateway.
	NatGatewayId *string

	// Reserved. If you need to sustain traffic greater than the documented limits (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)
	// , contact us through the Support Center (https://console.aws.amazon.com/support/home?)
	// .
	ProvisionedBandwidth *ProvisionedBandwidth

	// The state of the NAT gateway.
	//   - pending : The NAT gateway is being created and is not ready to process
	//   traffic.
	//   - failed : The NAT gateway could not be created. Check the failureCode and
	//   failureMessage fields for the reason.
	//   - available : The NAT gateway is able to process traffic. This status remains
	//   until you delete the NAT gateway, and does not indicate the health of the NAT
	//   gateway.
	//   - deleting : The NAT gateway is in the process of being terminated and may
	//   still be processing traffic.
	//   - deleted : The NAT gateway has been terminated and is no longer processing
	//   traffic.
	State NatGatewayState

	// The ID of the subnet in which the NAT gateway is located.
	SubnetId *string

	// The tags for the NAT gateway.
	Tags []Tag

	// The ID of the VPC in which the NAT gateway is located.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes the IP addresses and network interface associated with a NAT gateway.
type NatGatewayAddress struct {

	// [Public NAT gateway only] The allocation ID of the Elastic IP address that's
	// associated with the NAT gateway.
	AllocationId *string

	// [Public NAT gateway only] The association ID of the Elastic IP address that's
	// associated with the NAT gateway.
	AssociationId *string

	// The address failure message.
	FailureMessage *string

	// Defines if the IP address is the primary address.
	IsPrimary *bool

	// The ID of the network interface associated with the NAT gateway.
	NetworkInterfaceId *string

	// The private IP address associated with the NAT gateway.
	PrivateIp *string

	// [Public NAT gateway only] The Elastic IP address associated with the NAT
	// gateway.
	PublicIp *string

	// The address status.
	Status NatGatewayAddressStatus

	noSmithyDocumentSerde
}

// Describes a network ACL.
type NetworkAcl struct {

	// Any associations between the network ACL and one or more subnets
	Associations []NetworkAclAssociation

	// The entries (rules) in the network ACL.
	Entries []NetworkAclEntry

	// Indicates whether this is the default network ACL for the VPC.
	IsDefault *bool

	// The ID of the network ACL.
	NetworkAclId *string

	// The ID of the Amazon Web Services account that owns the network ACL.
	OwnerId *string

	// Any tags assigned to the network ACL.
	Tags []Tag

	// The ID of the VPC for the network ACL.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes an association between a network ACL and a subnet.
type NetworkAclAssociation struct {

	// The ID of the association between a network ACL and a subnet.
	NetworkAclAssociationId *string

	// The ID of the network ACL.
	NetworkAclId *string

	// The ID of the subnet.
	SubnetId *string

	noSmithyDocumentSerde
}

// Describes an entry in a network ACL.
type NetworkAclEntry struct {

	// The IPv4 network range to allow or deny, in CIDR notation.
	CidrBlock *string

	// Indicates whether the rule is an egress rule (applied to traffic leaving the
	// subnet).
	Egress *bool

	// ICMP protocol: The ICMP type and code.
	IcmpTypeCode *IcmpTypeCode

	// The IPv6 network range to allow or deny, in CIDR notation.
	Ipv6CidrBlock *string

	// TCP or UDP protocols: The range of ports the rule applies to.
	PortRange *PortRange

	// The protocol number. A value of "-1" means all protocols.
	Protocol *string

	// Indicates whether to allow or deny the traffic that matches the rule.
	RuleAction RuleAction

	// The rule number for the entry. ACL entries are processed in ascending order by
	// rule number.
	RuleNumber *int32

	noSmithyDocumentSerde
}

// The minimum and maximum amount of network bandwidth, in gigabits per second
// (Gbps). Setting the minimum bandwidth does not guarantee that your instance will
// achieve the minimum bandwidth. Amazon EC2 will identify instance types that
// support the specified minimum bandwidth, but the actual bandwidth of your
// instance might go below the specified minimum at times. For more information,
// see Available instance bandwidth (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth)
// in the Amazon EC2 User Guide.
type NetworkBandwidthGbps struct {

	// The maximum amount of network bandwidth, in Gbps. If this parameter is not
	// specified, there is no maximum limit.
	Max *float64

	// The minimum amount of network bandwidth, in Gbps. If this parameter is not
	// specified, there is no minimum limit.
	Min *float64

	noSmithyDocumentSerde
}

// The minimum and maximum amount of network bandwidth, in gigabits per second
// (Gbps). Setting the minimum bandwidth does not guarantee that your instance will
// achieve the minimum bandwidth. Amazon EC2 will identify instance types that
// support the specified minimum bandwidth, but the actual bandwidth of your
// instance might go below the specified minimum at times. For more information,
// see Available instance bandwidth (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth)
// in the Amazon EC2 User Guide.
type NetworkBandwidthGbpsRequest struct {

	// The maximum amount of network bandwidth, in Gbps. To specify no maximum limit,
	// omit this parameter.
	Max *float64

	// The minimum amount of network bandwidth, in Gbps. To specify no minimum limit,
	// omit this parameter.
	Min *float64

	noSmithyDocumentSerde
}

// Describes the network card support of the instance type.
type NetworkCardInfo struct {

	// The baseline network performance of the network card, in Gbps.
	BaselineBandwidthInGbps *float64

	// The maximum number of network interfaces for the network card.
	MaximumNetworkInterfaces *int32

	// The index of the network card.
	NetworkCardIndex *int32

	// The network performance of the network card.
	NetworkPerformance *string

	// The peak (burst) network performance of the network card, in Gbps.
	PeakBandwidthInGbps *float64

	noSmithyDocumentSerde
}

// Describes the networking features of the instance type.
type NetworkInfo struct {

	// The index of the default network card, starting at 0.
	DefaultNetworkCardIndex *int32

	// Describes the Elastic Fabric Adapters for the instance type.
	EfaInfo *EfaInfo

	// Indicates whether Elastic Fabric Adapter (EFA) is supported.
	EfaSupported *bool

	// Indicates whether the instance type supports ENA Express. ENA Express uses
	// Amazon Web Services Scalable Reliable Datagram (SRD) technology to increase the
	// maximum bandwidth used per stream and minimize tail latency of network traffic
	// between EC2 instances.
	EnaSrdSupported *bool

	// Indicates whether Elastic Network Adapter (ENA) is supported.
	EnaSupport EnaSupport

	// Indicates whether the instance type automatically encrypts in-transit traffic
	// between instances.
	EncryptionInTransitSupported *bool

	// The maximum number of IPv4 addresses per network interface.
	Ipv4AddressesPerInterface *int32

	// The maximum number of IPv6 addresses per network interface.
	Ipv6AddressesPerInterface *int32

	// Indicates whether IPv6 is supported.
	Ipv6Supported *bool

	// The maximum number of physical network cards that can be allocated to the
	// instance.
	MaximumNetworkCards *int32

	// The maximum number of network interfaces for the instance type.
	MaximumNetworkInterfaces *int32

	// Describes the network cards for the instance type.
	NetworkCards []NetworkCardInfo

	// The network performance.
	NetworkPerformance *string

	noSmithyDocumentSerde
}

// Describes a Network Access Scope.
type NetworkInsightsAccessScope struct {

	// The creation date.
	CreatedDate *time.Time

	// The Amazon Resource Name (ARN) of the Network Access Scope.
	NetworkInsightsAccessScopeArn *string

	// The ID of the Network Access Scope.
	NetworkInsightsAccessScopeId *string

	// The tags.
	Tags []Tag

	// The last updated date.
	UpdatedDate *time.Time

	noSmithyDocumentSerde
}

// Describes a Network Access Scope analysis.
type NetworkInsightsAccessScopeAnalysis struct {

	// The number of network interfaces analyzed.
	AnalyzedEniCount *int32

	// The analysis end date.
	EndDate *time.Time

	// Indicates whether there are findings.
	FindingsFound FindingsFound

	// The Amazon Resource Name (ARN) of the Network Access Scope analysis.
	NetworkInsightsAccessScopeAnalysisArn *string

	// The ID of the Network Access Scope analysis.
	NetworkInsightsAccessScopeAnalysisId *string

	// The ID of the Network Access Scope.
	NetworkInsightsAccessScopeId *string

	// The analysis start date.
	StartDate *time.Time

	// The status.
	Status AnalysisStatus

	// The status message.
	StatusMessage *string

	// The tags.
	Tags []Tag

	// The warning message.
	WarningMessage *string

	noSmithyDocumentSerde
}

// Describes the Network Access Scope content.
type NetworkInsightsAccessScopeContent struct {

	// The paths to exclude.
	ExcludePaths []AccessScopePath

	// The paths to match.
	MatchPaths []AccessScopePath

	// The ID of the Network Access Scope.
	NetworkInsightsAccessScopeId *string

	noSmithyDocumentSerde
}

// Describes a network insights analysis.
type NetworkInsightsAnalysis struct {

	// The member accounts that contain resources that the path can traverse.
	AdditionalAccounts []string

	// Potential intermediate components.
	AlternatePathHints []AlternatePathHint

	// The explanations. For more information, see Reachability Analyzer explanation
	// codes (https://docs.aws.amazon.com/vpc/latest/reachability/explanation-codes.html)
	// .
	Explanations []Explanation

	// The Amazon Resource Names (ARN) of the resources that the path must traverse.
	FilterInArns []string

	// The components in the path from source to destination.
	ForwardPathComponents []PathComponent

	// The Amazon Resource Name (ARN) of the network insights analysis.
	NetworkInsightsAnalysisArn *string

	// The ID of the network insights analysis.
	NetworkInsightsAnalysisId *string

	// The ID of the path.
	NetworkInsightsPathId *string

	// Indicates whether the destination is reachable from the source.
	NetworkPathFound *bool

	// The components in the path from destination to source.
	ReturnPathComponents []PathComponent

	// The time the analysis started.
	StartDate *time.Time

	// The status of the network insights analysis.
	Status AnalysisStatus

	// The status message, if the status is failed .
	StatusMessage *string

	// Potential intermediate accounts.
	SuggestedAccounts []string

	// The tags.
	Tags []Tag

	// The warning message.
	WarningMessage *string

	noSmithyDocumentSerde
}

// Describes a path.
type NetworkInsightsPath struct {

	// The time stamp when the path was created.
	CreatedDate *time.Time

	// The ID of the destination.
	Destination *string

	// The Amazon Resource Name (ARN) of the destination.
	DestinationArn *string

	// The IP address of the destination.
	DestinationIp *string

	// The destination port.
	DestinationPort *int32

	// Scopes the analysis to network paths that match specific filters at the
	// destination.
	FilterAtDestination *PathFilter

	// Scopes the analysis to network paths that match specific filters at the source.
	FilterAtSource *PathFilter

	// The Amazon Resource Name (ARN) of the path.
	NetworkInsightsPathArn *string

	// The ID of the path.
	NetworkInsightsPathId *string

	// The protocol.
	Protocol Protocol

	// The ID of the source.
	Source *string

	// The Amazon Resource Name (ARN) of the source.
	SourceArn *string

	// The IP address of the source.
	SourceIp *string

	// The tags associated with the path.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes a network interface.
type NetworkInterface struct {

	// The association information for an Elastic IP address (IPv4) associated with
	// the network interface.
	Association *NetworkInterfaceAssociation

	// The network interface attachment.
	Attachment *NetworkInterfaceAttachment

	// The Availability Zone.
	AvailabilityZone *string

	// A security group connection tracking configuration that enables you to set the
	// timeout for connection tracking on an Elastic network interface. For more
	// information, see Connection tracking timeouts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html#connection-tracking-timeouts)
	// in the Amazon Elastic Compute Cloud User Guide.
	ConnectionTrackingConfiguration *ConnectionTrackingConfiguration

	// Indicates whether a network interface with an IPv6 address is unreachable from
	// the public internet. If the value is true , inbound traffic from the internet is
	// dropped and you cannot assign an elastic IP address to the network interface.
	// The network interface is reachable from peered VPCs and resources connected
	// through a transit gateway, including on-premises networks.
	DenyAllIgwTraffic *bool

	// A description.
	Description *string

	// Any security groups for the network interface.
	Groups []GroupIdentifier

	// The type of network interface.
	InterfaceType NetworkInterfaceType

	// The IPv4 prefixes that are assigned to the network interface.
	Ipv4Prefixes []Ipv4PrefixSpecification

	// The IPv6 globally unique address associated with the network interface.
	Ipv6Address *string

	// The IPv6 addresses associated with the network interface.
	Ipv6Addresses []NetworkInterfaceIpv6Address

	// Indicates whether this is an IPv6 only network interface.
	Ipv6Native *bool

	// The IPv6 prefixes that are assigned to the network interface.
	Ipv6Prefixes []Ipv6PrefixSpecification

	// The MAC address.
	MacAddress *string

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The Amazon Resource Name (ARN) of the Outpost.
	OutpostArn *string

	// The Amazon Web Services account ID of the owner of the network interface.
	OwnerId *string

	// The private DNS name.
	PrivateDnsName *string

	// The IPv4 address of the network interface within the subnet.
	PrivateIpAddress *string

	// The private IPv4 addresses associated with the network interface.
	PrivateIpAddresses []NetworkInterfacePrivateIpAddress

	// The alias or Amazon Web Services account ID of the principal or service that
	// created the network interface.
	RequesterId *string

	// Indicates whether the network interface is being managed by Amazon Web Services.
	RequesterManaged *bool

	// Indicates whether source/destination checking is enabled.
	SourceDestCheck *bool

	// The status of the network interface.
	Status NetworkInterfaceStatus

	// The ID of the subnet.
	SubnetId *string

	// Any tags assigned to the network interface.
	TagSet []Tag

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes association information for an Elastic IP address (IPv4 only), or a
// Carrier IP address (for a network interface which resides in a subnet in a
// Wavelength Zone).
type NetworkInterfaceAssociation struct {

	// The allocation ID.
	AllocationId *string

	// The association ID.
	AssociationId *string

	// The carrier IP address associated with the network interface. This option is
	// only available when the network interface is in a subnet which is associated
	// with a Wavelength Zone.
	CarrierIp *string

	// The customer-owned IP address associated with the network interface.
	CustomerOwnedIp *string

	// The ID of the Elastic IP address owner.
	IpOwnerId *string

	// The public DNS name.
	PublicDnsName *string

	// The address of the Elastic IP address bound to the network interface.
	PublicIp *string

	noSmithyDocumentSerde
}

// Describes a network interface attachment.
type NetworkInterfaceAttachment struct {

	// The timestamp indicating when the attachment initiated.
	AttachTime *time.Time

	// The ID of the network interface attachment.
	AttachmentId *string

	// Indicates whether the network interface is deleted when the instance is
	// terminated.
	DeleteOnTermination *bool

	// The device index of the network interface attachment on the instance.
	DeviceIndex *int32

	// Configures ENA Express for the network interface that this action attaches to
	// the instance.
	EnaSrdSpecification *AttachmentEnaSrdSpecification

	// The ID of the instance.
	InstanceId *string

	// The Amazon Web Services account ID of the owner of the instance.
	InstanceOwnerId *string

	// The index of the network card.
	NetworkCardIndex *int32

	// The attachment state.
	Status AttachmentStatus

	noSmithyDocumentSerde
}

// Describes an attachment change.
type NetworkInterfaceAttachmentChanges struct {

	// The ID of the network interface attachment.
	AttachmentId *string

	// Indicates whether the network interface is deleted when the instance is
	// terminated.
	DeleteOnTermination *bool

	noSmithyDocumentSerde
}

// The minimum and maximum number of network interfaces.
type NetworkInterfaceCount struct {

	// The maximum number of network interfaces. If this parameter is not specified,
	// there is no maximum limit.
	Max *int32

	// The minimum number of network interfaces. If this parameter is not specified,
	// there is no minimum limit.
	Min *int32

	noSmithyDocumentSerde
}

// The minimum and maximum number of network interfaces.
type NetworkInterfaceCountRequest struct {

	// The maximum number of network interfaces. To specify no maximum limit, omit
	// this parameter.
	Max *int32

	// The minimum number of network interfaces. To specify no minimum limit, omit
	// this parameter.
	Min *int32

	noSmithyDocumentSerde
}

// Describes an IPv6 address associated with a network interface.
type NetworkInterfaceIpv6Address struct {

	// The IPv6 address.
	Ipv6Address *string

	// Determines if an IPv6 address associated with a network interface is the
	// primary IPv6 address. When you enable an IPv6 GUA address to be a primary IPv6,
	// the first IPv6 GUA will be made the primary IPv6 address until the instance is
	// terminated or the network interface is detached. For more information, see
	// ModifyNetworkInterfaceAttribute (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyNetworkInterfaceAttribute.html)
	// .
	IsPrimaryIpv6 *bool

	noSmithyDocumentSerde
}

// Describes a permission for a network interface.
type NetworkInterfacePermission struct {

	// The Amazon Web Services account ID.
	AwsAccountId *string

	// The Amazon Web Service.
	AwsService *string

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The ID of the network interface permission.
	NetworkInterfacePermissionId *string

	// The type of permission.
	Permission InterfacePermissionType

	// Information about the state of the permission.
	PermissionState *NetworkInterfacePermissionState

	noSmithyDocumentSerde
}

// Describes the state of a network interface permission.
type NetworkInterfacePermissionState struct {

	// The state of the permission.
	State NetworkInterfacePermissionStateCode

	// A status message, if applicable.
	StatusMessage *string

	noSmithyDocumentSerde
}

// Describes the private IPv4 address of a network interface.
type NetworkInterfacePrivateIpAddress struct {

	// The association information for an Elastic IP address (IPv4) associated with
	// the network interface.
	Association *NetworkInterfaceAssociation

	// Indicates whether this IPv4 address is the primary private IPv4 address of the
	// network interface.
	Primary *bool

	// The private DNS name.
	PrivateDnsName *string

	// The private IPv4 address.
	PrivateIpAddress *string

	noSmithyDocumentSerde
}

// Describes a DHCP configuration option.
type NewDhcpConfiguration struct {

	// The name of a DHCP option.
	Key *string

	// The values for the DHCP option.
	Values []string

	noSmithyDocumentSerde
}

// Describes the supported NitroTPM versions for the instance type.
type NitroTpmInfo struct {

	// Indicates the supported NitroTPM versions.
	SupportedVersions []string

	noSmithyDocumentSerde
}

// Describes the options for an OpenID Connect-compatible user-identity trust
// provider.
type OidcOptions struct {

	// The OIDC authorization endpoint.
	AuthorizationEndpoint *string

	// The client identifier.
	ClientId *string

	// The client secret.
	ClientSecret *string

	// The OIDC issuer.
	Issuer *string

	// The OpenID Connect (OIDC) scope specified.
	Scope *string

	// The OIDC token endpoint.
	TokenEndpoint *string

	// The OIDC user info endpoint.
	UserInfoEndpoint *string

	noSmithyDocumentSerde
}

// Describes the configuration of On-Demand Instances in an EC2 Fleet.
type OnDemandOptions struct {

	// The strategy that determines the order of the launch template overrides to use
	// in fulfilling On-Demand capacity. lowest-price - EC2 Fleet uses price to
	// determine the order, launching the lowest price first. prioritized - EC2 Fleet
	// uses the priority that you assigned to each launch template override, launching
	// the highest priority first. Default: lowest-price
	AllocationStrategy FleetOnDemandAllocationStrategy

	// The strategy for using unused Capacity Reservations for fulfilling On-Demand
	// capacity. Supported only for fleets of type instant .
	CapacityReservationOptions *CapacityReservationOptions

	// The maximum amount per hour for On-Demand Instances that you're willing to pay.
	// If your fleet includes T instances that are configured as unlimited , and if
	// their average CPU usage exceeds the baseline utilization, you will incur a
	// charge for surplus credits. The maxTotalPrice does not account for surplus
	// credits, and, if you use surplus credits, your final cost might be higher than
	// what you specified for maxTotalPrice . For more information, see Surplus
	// credits can incur charges (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits)
	// in the EC2 User Guide.
	MaxTotalPrice *string

	// The minimum target capacity for On-Demand Instances in the fleet. If the
	// minimum target capacity is not reached, the fleet launches no instances.
	// Supported only for fleets of type instant . At least one of the following must
	// be specified: SingleAvailabilityZone | SingleInstanceType
	MinTargetCapacity *int32

	// Indicates that the fleet launches all On-Demand Instances into a single
	// Availability Zone. Supported only for fleets of type instant .
	SingleAvailabilityZone *bool

	// Indicates that the fleet uses a single instance type to launch all On-Demand
	// Instances in the fleet. Supported only for fleets of type instant .
	SingleInstanceType *bool

	noSmithyDocumentSerde
}

// Describes the configuration of On-Demand Instances in an EC2 Fleet.
type OnDemandOptionsRequest struct {

	// The strategy that determines the order of the launch template overrides to use
	// in fulfilling On-Demand capacity. lowest-price - EC2 Fleet uses price to
	// determine the order, launching the lowest price first. prioritized - EC2 Fleet
	// uses the priority that you assigned to each launch template override, launching
	// the highest priority first. Default: lowest-price
	AllocationStrategy FleetOnDemandAllocationStrategy

	// The strategy for using unused Capacity Reservations for fulfilling On-Demand
	// capacity. Supported only for fleets of type instant .
	CapacityReservationOptions *CapacityReservationOptionsRequest

	// The maximum amount per hour for On-Demand Instances that you're willing to pay.
	// If your fleet includes T instances that are configured as unlimited , and if
	// their average CPU usage exceeds the baseline utilization, you will incur a
	// charge for surplus credits. The MaxTotalPrice does not account for surplus
	// credits, and, if you use surplus credits, your final cost might be higher than
	// what you specified for MaxTotalPrice . For more information, see Surplus
	// credits can incur charges (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits)
	// in the EC2 User Guide.
	MaxTotalPrice *string

	// The minimum target capacity for On-Demand Instances in the fleet. If the
	// minimum target capacity is not reached, the fleet launches no instances.
	// Supported only for fleets of type instant . At least one of the following must
	// be specified: SingleAvailabilityZone | SingleInstanceType
	MinTargetCapacity *int32

	// Indicates that the fleet launches all On-Demand Instances into a single
	// Availability Zone. Supported only for fleets of type instant .
	SingleAvailabilityZone *bool

	// Indicates that the fleet uses a single instance type to launch all On-Demand
	// Instances in the fleet. Supported only for fleets of type instant .
	SingleInstanceType *bool

	noSmithyDocumentSerde
}

// Describes a packet header statement.
type PacketHeaderStatement struct {

	// The destination addresses.
	DestinationAddresses []string

	// The destination ports.
	DestinationPorts []string

	// The destination prefix lists.
	DestinationPrefixLists []string

	// The protocols.
	Protocols []Protocol

	// The source addresses.
	SourceAddresses []string

	// The source ports.
	SourcePorts []string

	// The source prefix lists.
	SourcePrefixLists []string

	noSmithyDocumentSerde
}

// Describes a packet header statement.
type PacketHeaderStatementRequest struct {

	// The destination addresses.
	DestinationAddresses []string

	// The destination ports.
	DestinationPorts []string

	// The destination prefix lists.
	DestinationPrefixLists []string

	// The protocols.
	Protocols []Protocol

	// The source addresses.
	SourceAddresses []string

	// The source ports.
	SourcePorts []string

	// The source prefix lists.
	SourcePrefixLists []string

	noSmithyDocumentSerde
}

// Describes a path component.
type PathComponent struct {

	// The network ACL rule.
	AclRule *AnalysisAclRule

	// The additional details.
	AdditionalDetails []AdditionalDetail

	// The resource to which the path component is attached.
	AttachedTo *AnalysisComponent

	// The component.
	Component *AnalysisComponent

	// The destination VPC.
	DestinationVpc *AnalysisComponent

	// The load balancer listener.
	ElasticLoadBalancerListener *AnalysisComponent

	// The explanation codes.
	Explanations []Explanation

	// The Network Firewall stateful rule.
	FirewallStatefulRule *FirewallStatefulRule

	// The Network Firewall stateless rule.
	FirewallStatelessRule *FirewallStatelessRule

	// The inbound header.
	InboundHeader *AnalysisPacketHeader

	// The outbound header.
	OutboundHeader *AnalysisPacketHeader

	// The route table route.
	RouteTableRoute *AnalysisRouteTableRoute

	// The security group rule.
	SecurityGroupRule *AnalysisSecurityGroupRule

	// The sequence number.
	SequenceNumber *int32

	// The name of the VPC endpoint service.
	ServiceName *string

	// The source VPC.
	SourceVpc *AnalysisComponent

	// The subnet.
	Subnet *AnalysisComponent

	// The transit gateway.
	TransitGateway *AnalysisComponent

	// The route in a transit gateway route table.
	TransitGatewayRouteTableRoute *TransitGatewayRouteTableRoute

	// The component VPC.
	Vpc *AnalysisComponent

	noSmithyDocumentSerde
}

// Describes a set of filters for a path analysis. Use path filters to scope the
// analysis when there can be multiple resulting paths.
type PathFilter struct {

	// The destination IPv4 address.
	DestinationAddress *string

	// The destination port range.
	DestinationPortRange *FilterPortRange

	// The source IPv4 address.
	SourceAddress *string

	// The source port range.
	SourcePortRange *FilterPortRange

	noSmithyDocumentSerde
}

// Describes a set of filters for a path analysis. Use path filters to scope the
// analysis when there can be multiple resulting paths.
type PathRequestFilter struct {

	// The destination IPv4 address.
	DestinationAddress *string

	// The destination port range.
	DestinationPortRange *RequestFilterPortRange

	// The source IPv4 address.
	SourceAddress *string

	// The source port range.
	SourcePortRange *RequestFilterPortRange

	noSmithyDocumentSerde
}

// Describes a path statement.
type PathStatement struct {

	// The packet header statement.
	PacketHeaderStatement *PacketHeaderStatement

	// The resource statement.
	ResourceStatement *ResourceStatement

	noSmithyDocumentSerde
}

// Describes a path statement.
type PathStatementRequest struct {

	// The packet header statement.
	PacketHeaderStatement *PacketHeaderStatementRequest

	// The resource statement.
	ResourceStatement *ResourceStatementRequest

	noSmithyDocumentSerde
}

// Describes the data that identifies an Amazon FPGA image (AFI) on the PCI bus.
type PciId struct {

	// The ID of the device.
	DeviceId *string

	// The ID of the subsystem.
	SubsystemId *string

	// The ID of the vendor for the subsystem.
	SubsystemVendorId *string

	// The ID of the vendor.
	VendorId *string

	noSmithyDocumentSerde
}

// The status of the transit gateway peering attachment.
type PeeringAttachmentStatus struct {

	// The status code.
	Code *string

	// The status message, if applicable.
	Message *string

	noSmithyDocumentSerde
}

// Describes the VPC peering connection options.
type PeeringConnectionOptions struct {

	// If true, the public DNS hostnames of instances in the specified VPC resolve to
	// private IP addresses when queried from instances in the peer VPC.
	AllowDnsResolutionFromRemoteVpc *bool

	// Deprecated.
	AllowEgressFromLocalClassicLinkToRemoteVpc *bool

	// Deprecated.
	AllowEgressFromLocalVpcToRemoteClassicLink *bool

	noSmithyDocumentSerde
}

// The VPC peering connection options.
type PeeringConnectionOptionsRequest struct {

	// If true, enables a local VPC to resolve public DNS hostnames to private IP
	// addresses when queried from instances in the peer VPC.
	AllowDnsResolutionFromRemoteVpc *bool

	// Deprecated.
	AllowEgressFromLocalClassicLinkToRemoteVpc *bool

	// Deprecated.
	AllowEgressFromLocalVpcToRemoteClassicLink *bool

	noSmithyDocumentSerde
}

// Information about the transit gateway in the peering attachment.
type PeeringTgwInfo struct {

	// The ID of the core network where the transit gateway peer is located.
	CoreNetworkId *string

	// The ID of the Amazon Web Services account that owns the transit gateway.
	OwnerId *string

	// The Region of the transit gateway.
	Region *string

	// The ID of the transit gateway.
	TransitGatewayId *string

	noSmithyDocumentSerde
}

// The Diffie-Hellmann group number for phase 1 IKE negotiations.
type Phase1DHGroupNumbersListValue struct {

	// The Diffie-Hellmann group number.
	Value *int32

	noSmithyDocumentSerde
}

// Specifies a Diffie-Hellman group number for the VPN tunnel for phase 1 IKE
// negotiations.
type Phase1DHGroupNumbersRequestListValue struct {

	// The Diffie-Hellmann group number.
	Value *int32

	noSmithyDocumentSerde
}

// The encryption algorithm for phase 1 IKE negotiations.
type Phase1EncryptionAlgorithmsListValue struct {

	// The value for the encryption algorithm.
	Value *string

	noSmithyDocumentSerde
}

// Specifies the encryption algorithm for the VPN tunnel for phase 1 IKE
// negotiations.
type Phase1EncryptionAlgorithmsRequestListValue struct {

	// The value for the encryption algorithm.
	Value *string

	noSmithyDocumentSerde
}

// The integrity algorithm for phase 1 IKE negotiations.
type Phase1IntegrityAlgorithmsListValue struct {

	// The value for the integrity algorithm.
	Value *string

	noSmithyDocumentSerde
}

// Specifies the integrity algorithm for the VPN tunnel for phase 1 IKE
// negotiations.
type Phase1IntegrityAlgorithmsRequestListValue struct {

	// The value for the integrity algorithm.
	Value *string

	noSmithyDocumentSerde
}

// The Diffie-Hellmann group number for phase 2 IKE negotiations.
type Phase2DHGroupNumbersListValue struct {

	// The Diffie-Hellmann group number.
	Value *int32

	noSmithyDocumentSerde
}

// Specifies a Diffie-Hellman group number for the VPN tunnel for phase 2 IKE
// negotiations.
type Phase2DHGroupNumbersRequestListValue struct {

	// The Diffie-Hellmann group number.
	Value *int32

	noSmithyDocumentSerde
}

// The encryption algorithm for phase 2 IKE negotiations.
type Phase2EncryptionAlgorithmsListValue struct {

	// The encryption algorithm.
	Value *string

	noSmithyDocumentSerde
}

// Specifies the encryption algorithm for the VPN tunnel for phase 2 IKE
// negotiations.
type Phase2EncryptionAlgorithmsRequestListValue struct {

	// The encryption algorithm.
	Value *string

	noSmithyDocumentSerde
}

// The integrity algorithm for phase 2 IKE negotiations.
type Phase2IntegrityAlgorithmsListValue struct {

	// The integrity algorithm.
	Value *string

	noSmithyDocumentSerde
}

// Specifies the integrity algorithm for the VPN tunnel for phase 2 IKE
// negotiations.
type Phase2IntegrityAlgorithmsRequestListValue struct {

	// The integrity algorithm.
	Value *string

	noSmithyDocumentSerde
}

// Describes the placement of an instance.
type Placement struct {

	// The affinity setting for the instance on the Dedicated Host. This parameter is
	// not supported for CreateFleet (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet)
	// or ImportInstance (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html)
	// .
	Affinity *string

	// The Availability Zone of the instance. If not specified, an Availability Zone
	// will be automatically chosen for you based on the load balancing criteria for
	// the Region. This parameter is not supported for CreateFleet (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet)
	// .
	AvailabilityZone *string

	// The ID of the placement group that the instance is in. If you specify GroupId ,
	// you can't specify GroupName .
	GroupId *string

	// The name of the placement group that the instance is in. If you specify
	// GroupName , you can't specify GroupId .
	GroupName *string

	// The ID of the Dedicated Host on which the instance resides. This parameter is
	// not supported for CreateFleet (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet)
	// or ImportInstance (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html)
	// .
	HostId *string

	// The ARN of the host resource group in which to launch the instances. If you
	// specify this parameter, either omit the Tenancy parameter or set it to host .
	// This parameter is not supported for CreateFleet (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet)
	// .
	HostResourceGroupArn *string

	// The number of the partition that the instance is in. Valid only if the
	// placement group strategy is set to partition . This parameter is not supported
	// for CreateFleet (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet)
	// .
	PartitionNumber *int32

	// Reserved for future use.
	SpreadDomain *string

	// The tenancy of the instance. An instance with a tenancy of dedicated runs on
	// single-tenant hardware. This parameter is not supported for CreateFleet (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateFleet)
	// . The host tenancy is not supported for ImportInstance (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportInstance.html)
	// or for T3 instances that are configured for the unlimited CPU credit option.
	Tenancy Tenancy

	noSmithyDocumentSerde
}

// Describes a placement group.
type PlacementGroup struct {

	// The Amazon Resource Name (ARN) of the placement group.
	GroupArn *string

	// The ID of the placement group.
	GroupId *string

	// The name of the placement group.
	GroupName *string

	// The number of partitions. Valid only if strategy is set to partition .
	PartitionCount *int32

	// The spread level for the placement group. Only Outpost placement groups can be
	// spread across hosts.
	SpreadLevel SpreadLevel

	// The state of the placement group.
	State PlacementGroupState

	// The placement strategy.
	Strategy PlacementStrategy

	// Any tags applied to the placement group.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes the placement group support of the instance type.
type PlacementGroupInfo struct {

	// The supported placement group types.
	SupportedStrategies []PlacementGroupStrategy

	noSmithyDocumentSerde
}

// Describes the placement of an instance.
type PlacementResponse struct {

	// The name of the placement group that the instance is in.
	GroupName *string

	noSmithyDocumentSerde
}

// Describes a CIDR block for an address pool.
type PoolCidrBlock struct {

	// The CIDR block.
	Cidr *string

	noSmithyDocumentSerde
}

// Describes a range of ports.
type PortRange struct {

	// The first port in the range.
	From *int32

	// The last port in the range.
	To *int32

	noSmithyDocumentSerde
}

// Describes prefixes for Amazon Web Services services.
type PrefixList struct {

	// The IP address range of the Amazon Web Service.
	Cidrs []string

	// The ID of the prefix.
	PrefixListId *string

	// The name of the prefix.
	PrefixListName *string

	noSmithyDocumentSerde
}

// Describes the resource with which a prefix list is associated.
type PrefixListAssociation struct {

	// The ID of the resource.
	ResourceId *string

	// The owner of the resource.
	ResourceOwner *string

	noSmithyDocumentSerde
}

// Describes a prefix list entry.
type PrefixListEntry struct {

	// The CIDR block.
	Cidr *string

	// The description.
	Description *string

	noSmithyDocumentSerde
}

// Describes a prefix list ID.
type PrefixListId struct {

	// A description for the security group rule that references this prefix list ID.
	// Constraints: Up to 255 characters in length. Allowed characters are a-z, A-Z,
	// 0-9, spaces, and ._-:/()#,@[]+=;{}!$*
	Description *string

	// The ID of the prefix.
	PrefixListId *string

	noSmithyDocumentSerde
}

// Describes the price for a Reserved Instance.
type PriceSchedule struct {

	// The current price schedule, as determined by the term remaining for the
	// Reserved Instance in the listing. A specific price schedule is always in effect,
	// but only one price schedule can be active at any time. Take, for example, a
	// Reserved Instance listing that has five months remaining in its term. When you
	// specify price schedules for five months and two months, this means that schedule
	// 1, covering the first three months of the remaining term, will be active during
	// months 5, 4, and 3. Then schedule 2, covering the last two months of the term,
	// will be active for months 2 and 1.
	Active *bool

	// The currency for transacting the Reserved Instance resale. At this time, the
	// only supported currency is USD .
	CurrencyCode CurrencyCodeValues

	// The fixed price for the term.
	Price *float64

	// The number of months remaining in the reservation. For example, 2 is the second
	// to the last month before the capacity reservation expires.
	Term *int64

	noSmithyDocumentSerde
}

// Describes the price for a Reserved Instance.
type PriceScheduleSpecification struct {

	// The currency for transacting the Reserved Instance resale. At this time, the
	// only supported currency is USD .
	CurrencyCode CurrencyCodeValues

	// The fixed price for the term.
	Price *float64

	// The number of months remaining in the reservation. For example, 2 is the second
	// to the last month before the capacity reservation expires.
	Term *int64

	noSmithyDocumentSerde
}

// Describes a Reserved Instance offering.
type PricingDetail struct {

	// The number of reservations available for the price.
	Count *int32

	// The price per instance.
	Price *float64

	noSmithyDocumentSerde
}

// PrincipalIdFormat description
type PrincipalIdFormat struct {

	// PrincipalIdFormatARN description
	Arn *string

	// PrincipalIdFormatStatuses description
	Statuses []IdFormat

	noSmithyDocumentSerde
}

// Information about the Private DNS name for interface endpoints.
type PrivateDnsDetails struct {

	// The private DNS name assigned to the VPC endpoint service.
	PrivateDnsName *string

	noSmithyDocumentSerde
}

// Information about the private DNS name for the service endpoint.
type PrivateDnsNameConfiguration struct {

	// The name of the record subdomain the service provider needs to create. The
	// service provider adds the value text to the name .
	Name *string

	// The verification state of the VPC endpoint service. >Consumers of the endpoint
	// service can use the private name only when the state is verified .
	State DnsNameState

	// The endpoint service verification type, for example TXT.
	Type *string

	// The value the service provider adds to the private DNS name domain record
	// before verification.
	Value *string

	noSmithyDocumentSerde
}

// Describes the options for instance hostnames.
type PrivateDnsNameOptionsOnLaunch struct {

	// Indicates whether to respond to DNS queries for instance hostname with DNS AAAA
	// records.
	EnableResourceNameDnsAAAARecord *bool

	// Indicates whether to respond to DNS queries for instance hostnames with DNS A
	// records.
	EnableResourceNameDnsARecord *bool

	// The type of hostname for EC2 instances. For IPv4 only subnets, an instance DNS
	// name must be based on the instance IPv4 address. For IPv6 only subnets, an
	// instance DNS name must be based on the instance ID. For dual-stack subnets, you
	// can specify whether DNS names use the instance IPv4 address or the instance ID.
	HostnameType HostnameType

	noSmithyDocumentSerde
}

// Describes the options for instance hostnames.
type PrivateDnsNameOptionsRequest struct {

	// Indicates whether to respond to DNS queries for instance hostnames with DNS
	// AAAA records.
	EnableResourceNameDnsAAAARecord *bool

	// Indicates whether to respond to DNS queries for instance hostnames with DNS A
	// records.
	EnableResourceNameDnsARecord *bool

	// The type of hostname for EC2 instances. For IPv4 only subnets, an instance DNS
	// name must be based on the instance IPv4 address. For IPv6 only subnets, an
	// instance DNS name must be based on the instance ID. For dual-stack subnets, you
	// can specify whether DNS names use the instance IPv4 address or the instance ID.
	HostnameType HostnameType

	noSmithyDocumentSerde
}

// Describes the options for instance hostnames.
type PrivateDnsNameOptionsResponse struct {

	// Indicates whether to respond to DNS queries for instance hostnames with DNS
	// AAAA records.
	EnableResourceNameDnsAAAARecord *bool

	// Indicates whether to respond to DNS queries for instance hostnames with DNS A
	// records.
	EnableResourceNameDnsARecord *bool

	// The type of hostname to assign to an instance.
	HostnameType HostnameType

	noSmithyDocumentSerde
}

// Describes a secondary private IPv4 address for a network interface.
type PrivateIpAddressSpecification struct {

	// Indicates whether the private IPv4 address is the primary private IPv4 address.
	// Only one IPv4 address can be designated as primary.
	Primary *bool

	// The private IPv4 address.
	PrivateIpAddress *string

	noSmithyDocumentSerde
}

// Describes the processor used by the instance type.
type ProcessorInfo struct {

	// The manufacturer of the processor.
	Manufacturer *string

	// The architectures supported by the instance type.
	SupportedArchitectures []ArchitectureType

	// Indicates whether the instance type supports AMD SEV-SNP. If the request
	// returns amd-sev-snp , AMD SEV-SNP is supported. Otherwise, it is not supported.
	// For more information, see AMD SEV-SNP (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sev-snp.html)
	// .
	SupportedFeatures []SupportedAdditionalProcessorFeature

	// The speed of the processor, in GHz.
	SustainedClockSpeedInGhz *float64

	noSmithyDocumentSerde
}

// Describes a product code.
type ProductCode struct {

	// The product code.
	ProductCodeId *string

	// The type of product code.
	ProductCodeType ProductCodeValues

	noSmithyDocumentSerde
}

// Describes a virtual private gateway propagating route.
type PropagatingVgw struct {

	// The ID of the virtual private gateway.
	GatewayId *string

	noSmithyDocumentSerde
}

// Reserved. If you need to sustain traffic greater than the documented limits (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)
// , contact us through the Support Center (https://console.aws.amazon.com/support/home?)
// .
type ProvisionedBandwidth struct {

	// Reserved. If you need to sustain traffic greater than the documented limits (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)
	// , contact us through the Support Center (https://console.aws.amazon.com/support/home?)
	// .
	ProvisionTime *time.Time

	// Reserved. If you need to sustain traffic greater than the documented limits (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)
	// , contact us through the Support Center (https://console.aws.amazon.com/support/home?)
	// .
	Provisioned *string

	// Reserved. If you need to sustain traffic greater than the documented limits (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)
	// , contact us through the Support Center (https://console.aws.amazon.com/support/home?)
	// .
	RequestTime *time.Time

	// Reserved. If you need to sustain traffic greater than the documented limits (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)
	// , contact us through the Support Center (https://console.aws.amazon.com/support/home?)
	// .
	Requested *string

	// Reserved. If you need to sustain traffic greater than the documented limits (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)
	// , contact us through the Support Center (https://console.aws.amazon.com/support/home?)
	// .
	Status *string

	noSmithyDocumentSerde
}

// The status of an updated pointer (PTR) record for an Elastic IP address.
type PtrUpdateStatus struct {

	// The reason for the PTR record update.
	Reason *string

	// The status of the PTR record update.
	Status *string

	// The value for the PTR record update.
	Value *string

	noSmithyDocumentSerde
}

// Describes an IPv4 address pool.
type PublicIpv4Pool struct {

	// A description of the address pool.
	Description *string

	// The name of the location from which the address pool is advertised. A network
	// border group is a unique set of Availability Zones or Local Zones from where
	// Amazon Web Services advertises public IP addresses.
	NetworkBorderGroup *string

	// The address ranges.
	PoolAddressRanges []PublicIpv4PoolRange

	// The ID of the address pool.
	PoolId *string

	// Any tags for the address pool.
	Tags []Tag

	// The total number of addresses.
	TotalAddressCount *int32

	// The total number of available addresses.
	TotalAvailableAddressCount *int32

	noSmithyDocumentSerde
}

// Describes an address range of an IPv4 address pool.
type PublicIpv4PoolRange struct {

	// The number of addresses in the range.
	AddressCount *int32

	// The number of available addresses in the range.
	AvailableAddressCount *int32

	// The first IP address in the range.
	FirstAddress *string

	// The last IP address in the range.
	LastAddress *string

	noSmithyDocumentSerde
}

// Describes the result of the purchase.
type Purchase struct {

	// The currency in which the UpfrontPrice and HourlyPrice amounts are specified.
	// At this time, the only supported currency is USD .
	CurrencyCode CurrencyCodeValues

	// The duration of the reservation's term in seconds.
	Duration *int32

	// The IDs of the Dedicated Hosts associated with the reservation.
	HostIdSet []string

	// The ID of the reservation.
	HostReservationId *string

	// The hourly price of the reservation per hour.
	HourlyPrice *string

	// The instance family on the Dedicated Host that the reservation can be
	// associated with.
	InstanceFamily *string

	// The payment option for the reservation.
	PaymentOption PaymentOption

	// The upfront price of the reservation.
	UpfrontPrice *string

	noSmithyDocumentSerde
}

// Describes a request to purchase Scheduled Instances.
type PurchaseRequest struct {

	// The number of instances.
	//
	// This member is required.
	InstanceCount *int32

	// The purchase token.
	//
	// This member is required.
	PurchaseToken *string

	noSmithyDocumentSerde
}

// Describes a recurring charge.
type RecurringCharge struct {

	// The amount of the recurring charge.
	Amount *float64

	// The frequency of the recurring charge.
	Frequency RecurringChargeFrequency

	noSmithyDocumentSerde
}

// Describes the security group that is referenced in the security group rule.
type ReferencedSecurityGroup struct {

	// The ID of the security group.
	GroupId *string

	// The status of a VPC peering connection, if applicable.
	PeeringStatus *string

	// The Amazon Web Services account ID.
	UserId *string

	// The ID of the VPC.
	VpcId *string

	// The ID of the VPC peering connection (if applicable).
	VpcPeeringConnectionId *string

	noSmithyDocumentSerde
}

// Describes a Region.
type Region struct {

	// The Region service endpoint.
	Endpoint *string

	// The Region opt-in status. The possible values are opt-in-not-required , opted-in
	// , and not-opted-in .
	OptInStatus *string

	// The name of the Region.
	RegionName *string

	noSmithyDocumentSerde
}

// Information about the tag keys to register for the current Region. You can
// either specify individual tag keys or register all tag keys in the current
// Region. You must specify either IncludeAllTagsOfInstance or InstanceTagKeys in
// the request
type RegisterInstanceTagAttributeRequest struct {

	// Indicates whether to register all tag keys in the current Region. Specify true
	// to register all tag keys.
	IncludeAllTagsOfInstance *bool

	// The tag keys to register.
	InstanceTagKeys []string

	noSmithyDocumentSerde
}

// Remove an operating Region from an IPAM. Operating Regions are Amazon Web
// Services Regions where the IPAM is allowed to manage IP address CIDRs. IPAM only
// discovers and monitors resources in the Amazon Web Services Regions you select
// as operating Regions. For more information about operating Regions, see Create
// an IPAM (https://docs.aws.amazon.com/vpc/latest/ipam/create-ipam.html) in the
// Amazon VPC IPAM User Guide
type RemoveIpamOperatingRegion struct {

	// The name of the operating Region you want to remove.
	RegionName *string

	noSmithyDocumentSerde
}

// An entry for a prefix list.
type RemovePrefixListEntry struct {

	// The CIDR block.
	//
	// This member is required.
	Cidr *string

	noSmithyDocumentSerde
}

// Information about a root volume replacement task.
type ReplaceRootVolumeTask struct {

	// The time the task completed.
	CompleteTime *string

	// Indicates whether the original root volume is to be deleted after the root
	// volume replacement task completes.
	DeleteReplacedRootVolume *bool

	// The ID of the AMI used to create the replacement root volume.
	ImageId *string

	// The ID of the instance for which the root volume replacement task was created.
	InstanceId *string

	// The ID of the root volume replacement task.
	ReplaceRootVolumeTaskId *string

	// The ID of the snapshot used to create the replacement root volume.
	SnapshotId *string

	// The time the task was started.
	StartTime *string

	// The tags assigned to the task.
	Tags []Tag

	// The state of the task. The task can be in one of the following states:
	//   - pending - the replacement volume is being created.
	//   - in-progress - the original volume is being detached and the replacement
	//   volume is being attached.
	//   - succeeded - the replacement volume has been successfully attached to the
	//   instance and the instance is available.
	//   - failing - the replacement task is in the process of failing.
	//   - failed - the replacement task has failed but the original root volume is
	//   still attached.
	//   - failing-detached - the replacement task is in the process of failing. The
	//   instance might have no root volume attached.
	//   - failed-detached - the replacement task has failed and the instance has no
	//   root volume attached.
	TaskState ReplaceRootVolumeTaskState

	noSmithyDocumentSerde
}

// Describes a port range.
type RequestFilterPortRange struct {

	// The first port in the range.
	FromPort *int32

	// The last port in the range.
	ToPort *int32

	noSmithyDocumentSerde
}

// A tag on an IPAM resource.
type RequestIpamResourceTag struct {

	// The key of a tag assigned to the resource. Use this filter to find all
	// resources assigned a tag with a specific key, regardless of the tag value.
	Key *string

	// The value for the tag.
	Value *string

	noSmithyDocumentSerde
}

// The information to include in the launch template. You must specify at least
// one parameter for the launch template data.
type RequestLaunchTemplateData struct {

	// The block device mapping.
	BlockDeviceMappings []LaunchTemplateBlockDeviceMappingRequest

	// The Capacity Reservation targeting option. If you do not specify this
	// parameter, the instance's Capacity Reservation preference defaults to open ,
	// which enables it to run in any open Capacity Reservation that has matching
	// attributes (instance type, platform, Availability Zone).
	CapacityReservationSpecification *LaunchTemplateCapacityReservationSpecificationRequest

	// The CPU options for the instance. For more information, see Optimizing CPU
	// Options (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	CpuOptions *LaunchTemplateCpuOptionsRequest

	// The credit option for CPU usage of the instance. Valid only for T instances.
	CreditSpecification *CreditSpecificationRequest

	// Indicates whether to enable the instance for stop protection. For more
	// information, see Stop protection (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection)
	// in the Amazon Elastic Compute Cloud User Guide.
	DisableApiStop *bool

	// If you set this parameter to true , you can't terminate the instance using the
	// Amazon EC2 console, CLI, or API; otherwise, you can. To change this attribute
	// after launch, use ModifyInstanceAttribute (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyInstanceAttribute.html)
	// . Alternatively, if you set InstanceInitiatedShutdownBehavior to terminate , you
	// can terminate the instance by running the shutdown command from the instance.
	DisableApiTermination *bool

	// Indicates whether the instance is optimized for Amazon EBS I/O. This
	// optimization provides dedicated throughput to Amazon EBS and an optimized
	// configuration stack to provide optimal Amazon EBS I/O performance. This
	// optimization isn't available with all instance types. Additional usage charges
	// apply when using an EBS-optimized instance.
	EbsOptimized *bool

	// Deprecated. Amazon Elastic Graphics reached end of life on January 8, 2024. For
	// workloads that require graphics acceleration, we recommend that you use Amazon
	// EC2 G4ad, G4dn, or G5 instances.
	ElasticGpuSpecifications []ElasticGpuSpecification

	// An elastic inference accelerator to associate with the instance. Elastic
	// inference accelerators are a resource you can attach to your Amazon EC2
	// instances to accelerate your Deep Learning (DL) inference workloads. You cannot
	// specify accelerators from different generations in the same request. Starting
	// April 15, 2023, Amazon Web Services will not onboard new customers to Amazon
	// Elastic Inference (EI), and will help current customers migrate their workloads
	// to options that offer better price and performance. After April 15, 2023, new
	// customers will not be able to launch instances with Amazon EI accelerators in
	// Amazon SageMaker, Amazon ECS, or Amazon EC2. However, customers who have used
	// Amazon EI at least once during the past 30-day period are considered current
	// customers and will be able to continue using the service.
	ElasticInferenceAccelerators []LaunchTemplateElasticInferenceAccelerator

	// Indicates whether the instance is enabled for Amazon Web Services Nitro
	// Enclaves. For more information, see What is Amazon Web Services Nitro Enclaves? (https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html)
	// in the Amazon Web Services Nitro Enclaves User Guide. You can't enable Amazon
	// Web Services Nitro Enclaves and hibernation on the same instance.
	EnclaveOptions *LaunchTemplateEnclaveOptionsRequest

	// Indicates whether an instance is enabled for hibernation. This parameter is
	// valid only if the instance meets the hibernation prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hibernating-prerequisites.html)
	// . For more information, see Hibernate your instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	HibernationOptions *LaunchTemplateHibernationOptionsRequest

	// The name or Amazon Resource Name (ARN) of an IAM instance profile.
	IamInstanceProfile *LaunchTemplateIamInstanceProfileSpecificationRequest

	// The ID of the AMI. Alternatively, you can specify a Systems Manager parameter,
	// which will resolve to an AMI ID on launch. Valid formats:
	//   - ami-17characters00000
	//   - resolve:ssm:parameter-name
	//   - resolve:ssm:parameter-name:version-number
	//   - resolve:ssm:parameter-name:label
	//   - resolve:ssm:public-parameter
	// Currently, EC2 Fleet and Spot Fleet do not support specifying a Systems Manager
	// parameter. If the launch template will be used by an EC2 Fleet or Spot Fleet,
	// you must specify the AMI ID. For more information, see Use a Systems Manager
	// parameter instead of an AMI ID (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id)
	// in the Amazon Elastic Compute Cloud User Guide.
	ImageId *string

	// Indicates whether an instance stops or terminates when you initiate shutdown
	// from the instance (using the operating system command for system shutdown).
	// Default: stop
	InstanceInitiatedShutdownBehavior ShutdownBehavior

	// The market (purchasing) option for the instances.
	InstanceMarketOptions *LaunchTemplateInstanceMarketOptionsRequest

	// The attributes for the instance types. When you specify instance attributes,
	// Amazon EC2 will identify instance types with these attributes. You must specify
	// VCpuCount and MemoryMiB . All other attributes are optional. Any unspecified
	// optional attribute is set to its default. When you specify multiple attributes,
	// you get instance types that satisfy all of the specified attributes. If you
	// specify multiple values for an attribute, you get instance types that satisfy
	// any of the specified values. To limit the list of instance types from which
	// Amazon EC2 can identify matching instance types, you can use one of the
	// following parameters, but not both in the same request:
	//   - AllowedInstanceTypes - The instance types to include in the list. All other
	//   instance types are ignored, even if they match your specified attributes.
	//   - ExcludedInstanceTypes - The instance types to exclude from the list, even if
	//   they match your specified attributes.
	// If you specify InstanceRequirements , you can't specify InstanceType .
	// Attribute-based instance type selection is only supported when using Auto
	// Scaling groups, EC2 Fleet, and Spot Fleet to launch instances. If you plan to
	// use the launch template in the launch instance wizard (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)
	// , or with the RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html)
	// API or AWS::EC2::Instance (https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ec2-instance.html)
	// Amazon Web Services CloudFormation resource, you can't specify
	// InstanceRequirements . For more information, see Attribute-based instance type
	// selection for EC2 Fleet (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html)
	// , Attribute-based instance type selection for Spot Fleet (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-attribute-based-instance-type-selection.html)
	// , and Spot placement score (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-placement-score.html)
	// in the Amazon EC2 User Guide.
	InstanceRequirements *InstanceRequirementsRequest

	// The instance type. For more information, see Instance types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)
	// in the Amazon Elastic Compute Cloud User Guide. If you specify InstanceType ,
	// you can't specify InstanceRequirements .
	InstanceType InstanceType

	// The ID of the kernel. We recommend that you use PV-GRUB instead of kernels and
	// RAM disks. For more information, see User provided kernels (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	KernelId *string

	// The name of the key pair. You can create a key pair using CreateKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateKeyPair.html)
	// or ImportKeyPair (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImportKeyPair.html)
	// . If you do not specify a key pair, you can't connect to the instance unless you
	// choose an AMI that is configured to allow users another way to log in.
	KeyName *string

	// The license configurations.
	LicenseSpecifications []LaunchTemplateLicenseConfigurationRequest

	// The maintenance options for the instance.
	MaintenanceOptions *LaunchTemplateInstanceMaintenanceOptionsRequest

	// The metadata options for the instance. For more information, see Instance
	// metadata and user data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	MetadataOptions *LaunchTemplateInstanceMetadataOptionsRequest

	// The monitoring for the instance.
	Monitoring *LaunchTemplatesMonitoringRequest

	// One or more network interfaces. If you specify a network interface, you must
	// specify any security groups and subnets as part of the network interface.
	NetworkInterfaces []LaunchTemplateInstanceNetworkInterfaceSpecificationRequest

	// The placement for the instance.
	Placement *LaunchTemplatePlacementRequest

	// The options for the instance hostname. The default values are inherited from
	// the subnet.
	PrivateDnsNameOptions *LaunchTemplatePrivateDnsNameOptionsRequest

	// The ID of the RAM disk. We recommend that you use PV-GRUB instead of kernels
	// and RAM disks. For more information, see User provided kernels (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UserProvidedkernels.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	RamDiskId *string

	// One or more security group IDs. You can create a security group using
	// CreateSecurityGroup (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateSecurityGroup.html)
	// .
	SecurityGroupIds []string

	// One or more security group names. For a nondefault VPC, you must use security
	// group IDs instead.
	SecurityGroups []string

	// The tags to apply to the resources that are created during instance launch.
	// These tags are not applied to the launch template.
	TagSpecifications []LaunchTemplateTagSpecificationRequest

	// The user data to make available to the instance. You must provide
	// base64-encoded text. User data is limited to 16 KB. For more information, see
	// Run commands on your Linux instance at launch (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)
	// (Linux) or Work with instance user data (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instancedata-add-user-data.html)
	// (Windows) in the Amazon Elastic Compute Cloud User Guide. If you are creating
	// the launch template for use with Batch, the user data must be provided in the
	// MIME multi-part archive format (https://cloudinit.readthedocs.io/en/latest/topics/format.html#mime-multi-part-archive)
	// . For more information, see Amazon EC2 user data in launch templates (https://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html)
	// in the Batch User Guide.
	UserData *string

	noSmithyDocumentSerde
}

// Describes the launch specification for an instance.
type RequestSpotLaunchSpecification struct {

	// Deprecated.
	AddressingType *string

	// The block device mapping entries. You can't specify both a snapshot ID and an
	// encryption value. This is because only blank volumes can be encrypted on
	// creation. If a snapshot is the basis for a volume, it is not blank and its
	// encryption status is used for the volume encryption status.
	BlockDeviceMappings []BlockDeviceMapping

	// Indicates whether the instance is optimized for EBS I/O. This optimization
	// provides dedicated throughput to Amazon EBS and an optimized configuration stack
	// to provide optimal EBS I/O performance. This optimization isn't available with
	// all instance types. Additional usage charges apply when using an EBS Optimized
	// instance. Default: false
	EbsOptimized *bool

	// The IAM instance profile.
	IamInstanceProfile *IamInstanceProfileSpecification

	// The ID of the AMI.
	ImageId *string

	// The instance type. Only one instance type can be specified.
	InstanceType InstanceType

	// The ID of the kernel.
	KernelId *string

	// The name of the key pair.
	KeyName *string

	// Indicates whether basic or detailed monitoring is enabled for the instance.
	// Default: Disabled
	Monitoring *RunInstancesMonitoringEnabled

	// The network interfaces. If you specify a network interface, you must specify
	// subnet IDs and security group IDs using the network interface.
	NetworkInterfaces []InstanceNetworkInterfaceSpecification

	// The placement information for the instance.
	Placement *SpotPlacement

	// The ID of the RAM disk.
	RamdiskId *string

	// The IDs of the security groups.
	SecurityGroupIds []string

	// Not supported.
	SecurityGroups []string

	// The ID of the subnet in which to launch the instance.
	SubnetId *string

	// The base64-encoded user data that instances use when starting up. User data is
	// limited to 16 KB.
	UserData *string

	noSmithyDocumentSerde
}

// Describes a launch request for one or more instances, and includes owner,
// requester, and security group information that applies to all instances in the
// launch request.
type Reservation struct {

	// Not supported.
	Groups []GroupIdentifier

	// The instances.
	Instances []Instance

	// The ID of the Amazon Web Services account that owns the reservation.
	OwnerId *string

	// The ID of the requester that launched the instances on your behalf (for
	// example, Amazon Web Services Management Console or Auto Scaling).
	RequesterId *string

	// The ID of the reservation.
	ReservationId *string

	noSmithyDocumentSerde
}

// Information about an instance type to use in a Capacity Reservation Fleet.
type ReservationFleetInstanceSpecification struct {

	// The Availability Zone in which the Capacity Reservation Fleet reserves the
	// capacity. A Capacity Reservation Fleet can't span Availability Zones. All
	// instance type specifications that you specify for the Fleet must use the same
	// Availability Zone.
	AvailabilityZone *string

	// The ID of the Availability Zone in which the Capacity Reservation Fleet
	// reserves the capacity. A Capacity Reservation Fleet can't span Availability
	// Zones. All instance type specifications that you specify for the Fleet must use
	// the same Availability Zone.
	AvailabilityZoneId *string

	// Indicates whether the Capacity Reservation Fleet supports EBS-optimized
	// instances types. This optimization provides dedicated throughput to Amazon EBS
	// and an optimized configuration stack to provide optimal I/O performance. This
	// optimization isn't available with all instance types. Additional usage charges
	// apply when using EBS-optimized instance types.
	EbsOptimized *bool

	// The type of operating system for which the Capacity Reservation Fleet reserves
	// capacity.
	InstancePlatform CapacityReservationInstancePlatform

	// The instance type for which the Capacity Reservation Fleet reserves capacity.
	InstanceType InstanceType

	// The priority to assign to the instance type. This value is used to determine
	// which of the instance types specified for the Fleet should be prioritized for
	// use. A lower value indicates a high priority. For more information, see
	// Instance type priority (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#instance-priority)
	// in the Amazon EC2 User Guide.
	Priority *int32

	// The number of capacity units provided by the specified instance type. This
	// value, together with the total target capacity that you specify for the Fleet
	// determine the number of instances for which the Fleet reserves capacity. Both
	// values are based on units that make sense for your workload. For more
	// information, see Total target capacity (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/crfleet-concepts.html#target-capacity)
	// in the Amazon EC2 User Guide.
	Weight *float64

	noSmithyDocumentSerde
}

// The cost associated with the Reserved Instance.
type ReservationValue struct {

	// The hourly rate of the reservation.
	HourlyPrice *string

	// The balance of the total value (the sum of remainingUpfrontValue + hourlyPrice
	// * number of hours remaining).
	RemainingTotalValue *string

	// The remaining upfront cost of the reservation.
	RemainingUpfrontValue *string

	noSmithyDocumentSerde
}

// Describes the limit price of a Reserved Instance offering.
type ReservedInstanceLimitPrice struct {

	// Used for Reserved Instance Marketplace offerings. Specifies the limit price on
	// the total order (instanceCount * price).
	Amount *float64

	// The currency in which the limitPrice amount is specified. At this time, the
	// only supported currency is USD .
	CurrencyCode CurrencyCodeValues

	noSmithyDocumentSerde
}

// The total value of the Convertible Reserved Instance.
type ReservedInstanceReservationValue struct {

	// The total value of the Convertible Reserved Instance that you are exchanging.
	ReservationValue *ReservationValue

	// The ID of the Convertible Reserved Instance that you are exchanging.
	ReservedInstanceId *string

	noSmithyDocumentSerde
}

// Describes a Reserved Instance.
type ReservedInstances struct {

	// The Availability Zone in which the Reserved Instance can be used.
	AvailabilityZone *string

	// The currency of the Reserved Instance. It's specified using ISO 4217 standard
	// currency codes. At this time, the only supported currency is USD .
	CurrencyCode CurrencyCodeValues

	// The duration of the Reserved Instance, in seconds.
	Duration *int64

	// The time when the Reserved Instance expires.
	End *time.Time

	// The purchase price of the Reserved Instance.
	FixedPrice *float32

	// The number of reservations purchased.
	InstanceCount *int32

	// The tenancy of the instance.
	InstanceTenancy Tenancy

	// The instance type on which the Reserved Instance can be used.
	InstanceType InstanceType

	// The offering class of the Reserved Instance.
	OfferingClass OfferingClassType

	// The Reserved Instance offering type.
	OfferingType OfferingTypeValues

	// The Reserved Instance product platform description.
	ProductDescription RIProductDescription

	// The recurring charge tag assigned to the resource.
	RecurringCharges []RecurringCharge

	// The ID of the Reserved Instance.
	ReservedInstancesId *string

	// The scope of the Reserved Instance.
	Scope Scope

	// The date and time the Reserved Instance started.
	Start *time.Time

	// The state of the Reserved Instance purchase.
	State ReservedInstanceState

	// Any tags assigned to the resource.
	Tags []Tag

	// The usage price of the Reserved Instance, per hour.
	UsagePrice *float32

	noSmithyDocumentSerde
}

// Describes the configuration settings for the modified Reserved Instances.
type ReservedInstancesConfiguration struct {

	// The Availability Zone for the modified Reserved Instances.
	AvailabilityZone *string

	// The number of modified Reserved Instances. This is a required field for a
	// request.
	InstanceCount *int32

	// The instance type for the modified Reserved Instances.
	InstanceType InstanceType

	// The network platform of the modified Reserved Instances.
	Platform *string

	// Whether the Reserved Instance is applied to instances in a Region or instances
	// in a specific Availability Zone.
	Scope Scope

	noSmithyDocumentSerde
}

// Describes the ID of a Reserved Instance.
type ReservedInstancesId struct {

	// The ID of the Reserved Instance.
	ReservedInstancesId *string

	noSmithyDocumentSerde
}

// Describes a Reserved Instance listing.
type ReservedInstancesListing struct {

	// A unique, case-sensitive key supplied by the client to ensure that the request
	// is idempotent. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html)
	// .
	ClientToken *string

	// The time the listing was created.
	CreateDate *time.Time

	// The number of instances in this state.
	InstanceCounts []InstanceCount

	// The price of the Reserved Instance listing.
	PriceSchedules []PriceSchedule

	// The ID of the Reserved Instance.
	ReservedInstancesId *string

	// The ID of the Reserved Instance listing.
	ReservedInstancesListingId *string

	// The status of the Reserved Instance listing.
	Status ListingStatus

	// The reason for the current status of the Reserved Instance listing. The
	// response can be blank.
	StatusMessage *string

	// Any tags assigned to the resource.
	Tags []Tag

	// The last modified timestamp of the listing.
	UpdateDate *time.Time

	noSmithyDocumentSerde
}

// Describes a Reserved Instance modification.
type ReservedInstancesModification struct {

	// A unique, case-sensitive key supplied by the client to ensure that the request
	// is idempotent. For more information, see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html)
	// .
	ClientToken *string

	// The time when the modification request was created.
	CreateDate *time.Time

	// The time for the modification to become effective.
	EffectiveDate *time.Time

	// Contains target configurations along with their corresponding new Reserved
	// Instance IDs.
	ModificationResults []ReservedInstancesModificationResult

	// The IDs of one or more Reserved Instances.
	ReservedInstancesIds []ReservedInstancesId

	// A unique ID for the Reserved Instance modification.
	ReservedInstancesModificationId *string

	// The status of the Reserved Instances modification request.
	Status *string

	// The reason for the status.
	StatusMessage *string

	// The time when the modification request was last updated.
	UpdateDate *time.Time

	noSmithyDocumentSerde
}

// Describes the modification request/s.
type ReservedInstancesModificationResult struct {

	// The ID for the Reserved Instances that were created as part of the modification
	// request. This field is only available when the modification is fulfilled.
	ReservedInstancesId *string

	// The target Reserved Instances configurations supplied as part of the
	// modification request.
	TargetConfiguration *ReservedInstancesConfiguration

	noSmithyDocumentSerde
}

// Describes a Reserved Instance offering.
type ReservedInstancesOffering struct {

	// The Availability Zone in which the Reserved Instance can be used.
	AvailabilityZone *string

	// The currency of the Reserved Instance offering you are purchasing. It's
	// specified using ISO 4217 standard currency codes. At this time, the only
	// supported currency is USD .
	CurrencyCode CurrencyCodeValues

	// The duration of the Reserved Instance, in seconds.
	Duration *int64

	// The purchase price of the Reserved Instance.
	FixedPrice *float32

	// The tenancy of the instance.
	InstanceTenancy Tenancy

	// The instance type on which the Reserved Instance can be used.
	InstanceType InstanceType

	// Indicates whether the offering is available through the Reserved Instance
	// Marketplace (resale) or Amazon Web Services. If it's a Reserved Instance
	// Marketplace offering, this is true .
	Marketplace *bool

	// If convertible it can be exchanged for Reserved Instances of the same or higher
	// monetary value, with different configurations. If standard , it is not possible
	// to perform an exchange.
	OfferingClass OfferingClassType

	// The Reserved Instance offering type.
	OfferingType OfferingTypeValues

	// The pricing details of the Reserved Instance offering.
	PricingDetails []PricingDetail

	// The Reserved Instance product platform description.
	ProductDescription RIProductDescription

	// The recurring charge tag assigned to the resource.
	RecurringCharges []RecurringCharge

	// The ID of the Reserved Instance offering. This is the offering ID used in
	// GetReservedInstancesExchangeQuote to confirm that an exchange can be made.
	ReservedInstancesOfferingId *string

	// Whether the Reserved Instance is applied to instances in a Region or an
	// Availability Zone.
	Scope Scope

	// The usage price of the Reserved Instance, per hour.
	UsagePrice *float32

	noSmithyDocumentSerde
}

// Describes a resource statement.
type ResourceStatement struct {

	// The resource types.
	ResourceTypes []string

	// The resources.
	Resources []string

	noSmithyDocumentSerde
}

// Describes a resource statement.
type ResourceStatementRequest struct {

	// The resource types.
	ResourceTypes []string

	// The resources.
	Resources []string

	noSmithyDocumentSerde
}

// Describes the error that's returned when you cannot delete a launch template
// version.
type ResponseError struct {

	// The error code.
	Code LaunchTemplateErrorCode

	// The error message, if applicable.
	Message *string

	noSmithyDocumentSerde
}

// The information for a launch template.
type ResponseLaunchTemplateData struct {

	// The block device mappings.
	BlockDeviceMappings []LaunchTemplateBlockDeviceMapping

	// Information about the Capacity Reservation targeting option.
	CapacityReservationSpecification *LaunchTemplateCapacityReservationSpecificationResponse

	// The CPU options for the instance. For more information, see Optimizing CPU
	// options (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-optimize-cpu.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	CpuOptions *LaunchTemplateCpuOptions

	// The credit option for CPU usage of the instance.
	CreditSpecification *CreditSpecification

	// Indicates whether the instance is enabled for stop protection. For more
	// information, see Stop protection (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html#Using_StopProtection)
	// in the Amazon Elastic Compute Cloud User Guide.
	DisableApiStop *bool

	// If set to true , indicates that the instance cannot be terminated using the
	// Amazon EC2 console, command line tool, or API.
	DisableApiTermination *bool

	// Indicates whether the instance is optimized for Amazon EBS I/O.
	EbsOptimized *bool

	// Deprecated. Amazon Elastic Graphics reached end of life on January 8, 2024. For
	// workloads that require graphics acceleration, we recommend that you use Amazon
	// EC2 G4ad, G4dn, or G5 instances.
	ElasticGpuSpecifications []ElasticGpuSpecificationResponse

	// An elastic inference accelerator to associate with the instance. Elastic
	// inference accelerators are a resource you can attach to your Amazon EC2
	// instances to accelerate your Deep Learning (DL) inference workloads. You cannot
	// specify accelerators from different generations in the same request. Starting
	// April 15, 2023, Amazon Web Services will not onboard new customers to Amazon
	// Elastic Inference (EI), and will help current customers migrate their workloads
	// to options that offer better price and performance. After April 15, 2023, new
	// customers will not be able to launch instances with Amazon EI accelerators in
	// Amazon SageMaker, Amazon ECS, or Amazon EC2. However, customers who have used
	// Amazon EI at least once during the past 30-day period are considered current
	// customers and will be able to continue using the service.
	ElasticInferenceAccelerators []LaunchTemplateElasticInferenceAcceleratorResponse

	// Indicates whether the instance is enabled for Amazon Web Services Nitro
	// Enclaves.
	EnclaveOptions *LaunchTemplateEnclaveOptions

	// Indicates whether an instance is configured for hibernation. For more
	// information, see Hibernate your instance (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Hibernate.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	HibernationOptions *LaunchTemplateHibernationOptions

	// The IAM instance profile.
	IamInstanceProfile *LaunchTemplateIamInstanceProfileSpecification

	// The ID of the AMI or a Systems Manager parameter. The Systems Manager parameter
	// will resolve to the ID of the AMI at instance launch. The value depends on what
	// you specified in the request. The possible values are:
	//   - If an AMI ID was specified in the request, then this is the AMI ID.
	//   - If a Systems Manager parameter was specified in the request, and
	//   ResolveAlias was configured as true , then this is the AMI ID that the
	//   parameter is mapped to in the Parameter Store.
	//   - If a Systems Manager parameter was specified in the request, and
	//   ResolveAlias was configured as false , then this is the parameter value.
	// For more information, see Use a Systems Manager parameter instead of an AMI ID (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#use-an-ssm-parameter-instead-of-an-ami-id)
	// in the Amazon Elastic Compute Cloud User Guide.
	ImageId *string

	// Indicates whether an instance stops or terminates when you initiate shutdown
	// from the instance (using the operating system command for system shutdown).
	InstanceInitiatedShutdownBehavior ShutdownBehavior

	// The market (purchasing) option for the instances.
	InstanceMarketOptions *LaunchTemplateInstanceMarketOptions

	// The attributes for the instance types. When you specify instance attributes,
	// Amazon EC2 will identify instance types with these attributes. If you specify
	// InstanceRequirements , you can't specify InstanceTypes .
	InstanceRequirements *InstanceRequirements

	// The instance type.
	InstanceType InstanceType

	// The ID of the kernel, if applicable.
	KernelId *string

	// The name of the key pair.
	KeyName *string

	// The license configurations.
	LicenseSpecifications []LaunchTemplateLicenseConfiguration

	// The maintenance options for your instance.
	MaintenanceOptions *LaunchTemplateInstanceMaintenanceOptions

	// The metadata options for the instance. For more information, see Instance
	// metadata and user data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	MetadataOptions *LaunchTemplateInstanceMetadataOptions

	// The monitoring for the instance.
	Monitoring *LaunchTemplatesMonitoring

	// The network interfaces.
	NetworkInterfaces []LaunchTemplateInstanceNetworkInterfaceSpecification

	// The placement of the instance.
	Placement *LaunchTemplatePlacement

	// The options for the instance hostname.
	PrivateDnsNameOptions *LaunchTemplatePrivateDnsNameOptions

	// The ID of the RAM disk, if applicable.
	RamDiskId *string

	// The security group IDs.
	SecurityGroupIds []string

	// The security group names.
	SecurityGroups []string

	// The tags that are applied to the resources that are created during instance
	// launch.
	TagSpecifications []LaunchTemplateTagSpecification

	// The user data for the instance.
	UserData *string

	noSmithyDocumentSerde
}

// Describes a route in a route table.
type Route struct {

	// The ID of the carrier gateway.
	CarrierGatewayId *string

	// The Amazon Resource Name (ARN) of the core network.
	CoreNetworkArn *string

	// The IPv4 CIDR block used for the destination match.
	DestinationCidrBlock *string

	// The IPv6 CIDR block used for the destination match.
	DestinationIpv6CidrBlock *string

	// The prefix of the Amazon Web Service.
	DestinationPrefixListId *string

	// The ID of the egress-only internet gateway.
	EgressOnlyInternetGatewayId *string

	// The ID of a gateway attached to your VPC.
	GatewayId *string

	// The ID of a NAT instance in your VPC.
	InstanceId *string

	// The ID of Amazon Web Services account that owns the instance.
	InstanceOwnerId *string

	// The ID of the local gateway.
	LocalGatewayId *string

	// The ID of a NAT gateway.
	NatGatewayId *string

	// The ID of the network interface.
	NetworkInterfaceId *string

	// Describes how the route was created.
	//   - CreateRouteTable - The route was automatically created when the route table
	//   was created.
	//   - CreateRoute - The route was manually added to the route table.
	//   - EnableVgwRoutePropagation - The route was propagated by route propagation.
	Origin RouteOrigin

	// The state of the route. The blackhole state indicates that the route's target
	// isn't available (for example, the specified gateway isn't attached to the VPC,
	// or the specified NAT instance has been terminated).
	State RouteState

	// The ID of a transit gateway.
	TransitGatewayId *string

	// The ID of a VPC peering connection.
	VpcPeeringConnectionId *string

	noSmithyDocumentSerde
}

// Describes a route table.
type RouteTable struct {

	// The associations between the route table and one or more subnets or a gateway.
	Associations []RouteTableAssociation

	// The ID of the Amazon Web Services account that owns the route table.
	OwnerId *string

	// Any virtual private gateway (VGW) propagating routes.
	PropagatingVgws []PropagatingVgw

	// The ID of the route table.
	RouteTableId *string

	// The routes in the route table.
	Routes []Route

	// Any tags assigned to the route table.
	Tags []Tag

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes an association between a route table and a subnet or gateway.
type RouteTableAssociation struct {

	// The state of the association.
	AssociationState *RouteTableAssociationState

	// The ID of the internet gateway or virtual private gateway.
	GatewayId *string

	// Indicates whether this is the main route table.
	Main *bool

	// The ID of the association.
	RouteTableAssociationId *string

	// The ID of the route table.
	RouteTableId *string

	// The ID of the subnet. A subnet ID is not returned for an implicit association.
	SubnetId *string

	noSmithyDocumentSerde
}

// Describes the state of an association between a route table and a subnet or
// gateway.
type RouteTableAssociationState struct {

	// The state of the association.
	State RouteTableAssociationStateCode

	// The status message, if applicable.
	StatusMessage *string

	noSmithyDocumentSerde
}

// Describes the rule options for a stateful rule group.
type RuleGroupRuleOptionsPair struct {

	// The ARN of the rule group.
	RuleGroupArn *string

	// The rule options.
	RuleOptions []RuleOption

	noSmithyDocumentSerde
}

// Describes the type of a stateful rule group.
type RuleGroupTypePair struct {

	// The ARN of the rule group.
	RuleGroupArn *string

	// The rule group type. The possible values are Domain List and Suricata .
	RuleGroupType *string

	noSmithyDocumentSerde
}

// Describes additional settings for a stateful rule.
type RuleOption struct {

	// The Suricata keyword.
	Keyword *string

	// The settings for the keyword.
	Settings []string

	noSmithyDocumentSerde
}

// Describes the monitoring of an instance.
type RunInstancesMonitoringEnabled struct {

	// Indicates whether detailed monitoring is enabled. Otherwise, basic monitoring
	// is enabled.
	//
	// This member is required.
	Enabled *bool

	noSmithyDocumentSerde
}

// The tags to apply to the AMI object that will be stored in the Amazon S3
// bucket. For more information, see Categorizing your storage using tags (https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-tagging.html)
// in the Amazon Simple Storage Service User Guide.
type S3ObjectTag struct {

	// The key of the tag. Constraints: Tag keys are case-sensitive and can be up to
	// 128 Unicode characters in length. May not begin with aws :.
	Key *string

	// The value of the tag. Constraints: Tag values are case-sensitive and can be up
	// to 256 Unicode characters in length.
	Value *string

	noSmithyDocumentSerde
}

// Describes the storage parameters for Amazon S3 and Amazon S3 buckets for an
// instance store-backed AMI.
type S3Storage struct {

	// The access key ID of the owner of the bucket. Before you specify a value for
	// your access key ID, review and follow the guidance in Best Practices for Amazon
	// Web Services accounts (https://docs.aws.amazon.com/accounts/latest/reference/best-practices.html)
	// in the Account ManagementReference Guide.
	AWSAccessKeyId *string

	// The bucket in which to store the AMI. You can specify a bucket that you already
	// own or a new bucket that Amazon EC2 creates on your behalf. If you specify a
	// bucket that belongs to someone else, Amazon EC2 returns an error.
	Bucket *string

	// The beginning of the file name of the AMI.
	Prefix *string

	// An Amazon S3 upload policy that gives Amazon EC2 permission to upload items
	// into Amazon S3 on your behalf.
	UploadPolicy []byte

	// The signature of the JSON document.
	UploadPolicySignature *string

	noSmithyDocumentSerde
}

// Describes a Scheduled Instance.
type ScheduledInstance struct {

	// The Availability Zone.
	AvailabilityZone *string

	// The date when the Scheduled Instance was purchased.
	CreateDate *time.Time

	// The hourly price for a single instance.
	HourlyPrice *string

	// The number of instances.
	InstanceCount *int32

	// The instance type.
	InstanceType *string

	// The network platform.
	NetworkPlatform *string

	// The time for the next schedule to start.
	NextSlotStartTime *time.Time

	// The platform ( Linux/UNIX or Windows ).
	Platform *string

	// The time that the previous schedule ended or will end.
	PreviousSlotEndTime *time.Time

	// The schedule recurrence.
	Recurrence *ScheduledInstanceRecurrence

	// The Scheduled Instance ID.
	ScheduledInstanceId *string

	// The number of hours in the schedule.
	SlotDurationInHours *int32

	// The end date for the Scheduled Instance.
	TermEndDate *time.Time

	// The start date for the Scheduled Instance.
	TermStartDate *time.Time

	// The total number of hours for a single instance for the entire term.
	TotalScheduledInstanceHours *int32

	noSmithyDocumentSerde
}

// Describes a schedule that is available for your Scheduled Instances.
type ScheduledInstanceAvailability struct {

	// The Availability Zone.
	AvailabilityZone *string

	// The number of available instances.
	AvailableInstanceCount *int32

	// The time period for the first schedule to start.
	FirstSlotStartTime *time.Time

	// The hourly price for a single instance.
	HourlyPrice *string

	// The instance type. You can specify one of the C3, C4, M4, or R3 instance types.
	InstanceType *string

	// The maximum term. The only possible value is 365 days.
	MaxTermDurationInDays *int32

	// The minimum term. The only possible value is 365 days.
	MinTermDurationInDays *int32

	// The network platform.
	NetworkPlatform *string

	// The platform ( Linux/UNIX or Windows ).
	Platform *string

	// The purchase token. This token expires in two hours.
	PurchaseToken *string

	// The schedule recurrence.
	Recurrence *ScheduledInstanceRecurrence

	// The number of hours in the schedule.
	SlotDurationInHours *int32

	// The total number of hours for a single instance for the entire term.
	TotalScheduledInstanceHours *int32

	noSmithyDocumentSerde
}

// Describes the recurring schedule for a Scheduled Instance.
type ScheduledInstanceRecurrence struct {

	// The frequency ( Daily , Weekly , or Monthly ).
	Frequency *string

	// The interval quantity. The interval unit depends on the value of frequency . For
	// example, every 2 weeks or every 2 months.
	Interval *int32

	// The days. For a monthly schedule, this is one or more days of the month (1-31).
	// For a weekly schedule, this is one or more days of the week (1-7, where 1 is
	// Sunday).
	OccurrenceDaySet []int32

	// Indicates whether the occurrence is relative to the end of the specified week
	// or month.
	OccurrenceRelativeToEnd *bool

	// The unit for occurrenceDaySet ( DayOfWeek or DayOfMonth ).
	OccurrenceUnit *string

	noSmithyDocumentSerde
}

// Describes the recurring schedule for a Scheduled Instance.
type ScheduledInstanceRecurrenceRequest struct {

	// The frequency ( Daily , Weekly , or Monthly ).
	Frequency *string

	// The interval quantity. The interval unit depends on the value of Frequency . For
	// example, every 2 weeks or every 2 months.
	Interval *int32

	// The days. For a monthly schedule, this is one or more days of the month (1-31).
	// For a weekly schedule, this is one or more days of the week (1-7, where 1 is
	// Sunday). You can't specify this value with a daily schedule. If the occurrence
	// is relative to the end of the month, you can specify only a single day.
	OccurrenceDays []int32

	// Indicates whether the occurrence is relative to the end of the specified week
	// or month. You can't specify this value with a daily schedule.
	OccurrenceRelativeToEnd *bool

	// The unit for OccurrenceDays ( DayOfWeek or DayOfMonth ). This value is required
	// for a monthly schedule. You can't specify DayOfWeek with a weekly schedule. You
	// can't specify this value with a daily schedule.
	OccurrenceUnit *string

	noSmithyDocumentSerde
}

// Describes a block device mapping for a Scheduled Instance.
type ScheduledInstancesBlockDeviceMapping struct {

	// The device name (for example, /dev/sdh or xvdh ).
	DeviceName *string

	// Parameters used to set up EBS volumes automatically when the instance is
	// launched.
	Ebs *ScheduledInstancesEbs

	// To omit the device from the block device mapping, specify an empty string.
	NoDevice *string

	// The virtual device name ( ephemeral N). Instance store volumes are numbered
	// starting from 0. An instance type with two available instance store volumes can
	// specify mappings for ephemeral0 and ephemeral1 . The number of available
	// instance store volumes depends on the instance type. After you connect to the
	// instance, you must mount the volume. Constraints: For M3 instances, you must
	// specify instance store volumes in the block device mapping for the instance.
	// When you launch an M3 instance, we ignore any instance store volumes specified
	// in the block device mapping for the AMI.
	VirtualName *string

	noSmithyDocumentSerde
}

// Describes an EBS volume for a Scheduled Instance.
type ScheduledInstancesEbs struct {

	// Indicates whether the volume is deleted on instance termination.
	DeleteOnTermination *bool

	// Indicates whether the volume is encrypted. You can attached encrypted volumes
	// only to instances that support them.
	Encrypted *bool

	// The number of I/O operations per second (IOPS) to provision for a gp3 , io1 , or
	// io2 volume.
	Iops *int32

	// The ID of the snapshot.
	SnapshotId *string

	// The size of the volume, in GiB. Default: If you're creating the volume from a
	// snapshot and don't specify a volume size, the default is the snapshot size.
	VolumeSize *int32

	// The volume type. Default: gp2
	VolumeType *string

	noSmithyDocumentSerde
}

// Describes an IAM instance profile for a Scheduled Instance.
type ScheduledInstancesIamInstanceProfile struct {

	// The Amazon Resource Name (ARN).
	Arn *string

	// The name.
	Name *string

	noSmithyDocumentSerde
}

// Describes an IPv6 address.
type ScheduledInstancesIpv6Address struct {

	// The IPv6 address.
	Ipv6Address *string

	noSmithyDocumentSerde
}

// Describes the launch specification for a Scheduled Instance. If you are
// launching the Scheduled Instance in EC2-VPC, you must specify the ID of the
// subnet. You can specify the subnet using either SubnetId or NetworkInterface .
type ScheduledInstancesLaunchSpecification struct {

	// The ID of the Amazon Machine Image (AMI).
	//
	// This member is required.
	ImageId *string

	// The block device mapping entries.
	BlockDeviceMappings []ScheduledInstancesBlockDeviceMapping

	// Indicates whether the instances are optimized for EBS I/O. This optimization
	// provides dedicated throughput to Amazon EBS and an optimized configuration stack
	// to provide optimal EBS I/O performance. This optimization isn't available with
	// all instance types. Additional usage charges apply when using an EBS-optimized
	// instance. Default: false
	EbsOptimized *bool

	// The IAM instance profile.
	IamInstanceProfile *ScheduledInstancesIamInstanceProfile

	// The instance type.
	InstanceType *string

	// The ID of the kernel.
	KernelId *string

	// The name of the key pair.
	KeyName *string

	// Enable or disable monitoring for the instances.
	Monitoring *ScheduledInstancesMonitoring

	// The network interfaces.
	NetworkInterfaces []ScheduledInstancesNetworkInterface

	// The placement information.
	Placement *ScheduledInstancesPlacement

	// The ID of the RAM disk.
	RamdiskId *string

	// The IDs of the security groups.
	SecurityGroupIds []string

	// The ID of the subnet in which to launch the instances.
	SubnetId *string

	// The base64-encoded MIME user data.
	UserData *string

	noSmithyDocumentSerde
}

// Describes whether monitoring is enabled for a Scheduled Instance.
type ScheduledInstancesMonitoring struct {

	// Indicates whether monitoring is enabled.
	Enabled *bool

	noSmithyDocumentSerde
}

// Describes a network interface for a Scheduled Instance.
type ScheduledInstancesNetworkInterface struct {

	// Indicates whether to assign a public IPv4 address to instances launched in a
	// VPC. The public IPv4 address can only be assigned to a network interface for
	// eth0, and can only be assigned to a new network interface, not an existing one.
	// You cannot specify more than one network interface in the request. If launching
	// into a default subnet, the default value is true . Starting on February 1, 2024,
	// Amazon Web Services will charge for all public IPv4 addresses, including public
	// IPv4 addresses associated with running instances and Elastic IP addresses. For
	// more information, see the Public IPv4 Address tab on the Amazon VPC pricing page (http://aws.amazon.com/vpc/pricing/)
	// .
	AssociatePublicIpAddress *bool

	// Indicates whether to delete the interface when the instance is terminated.
	DeleteOnTermination *bool

	// The description.
	Description *string

	// The index of the device for the network interface attachment.
	DeviceIndex *int32

	// The IDs of the security groups.
	Groups []string

	// The number of IPv6 addresses to assign to the network interface. The IPv6
	// addresses are automatically selected from the subnet range.
	Ipv6AddressCount *int32

	// The specific IPv6 addresses from the subnet range.
	Ipv6Addresses []ScheduledInstancesIpv6Address

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The IPv4 address of the network interface within the subnet.
	PrivateIpAddress *string

	// The private IPv4 addresses.
	PrivateIpAddressConfigs []ScheduledInstancesPrivateIpAddressConfig

	// The number of secondary private IPv4 addresses.
	SecondaryPrivateIpAddressCount *int32

	// The ID of the subnet.
	SubnetId *string

	noSmithyDocumentSerde
}

// Describes the placement for a Scheduled Instance.
type ScheduledInstancesPlacement struct {

	// The Availability Zone.
	AvailabilityZone *string

	// The name of the placement group.
	GroupName *string

	noSmithyDocumentSerde
}

// Describes a private IPv4 address for a Scheduled Instance.
type ScheduledInstancesPrivateIpAddressConfig struct {

	// Indicates whether this is a primary IPv4 address. Otherwise, this is a
	// secondary IPv4 address.
	Primary *bool

	// The IPv4 address.
	PrivateIpAddress *string

	noSmithyDocumentSerde
}

// Describes a security group.
type SecurityGroup struct {

	// A description of the security group.
	Description *string

	// The ID of the security group.
	GroupId *string

	// The name of the security group.
	GroupName *string

	// The inbound rules associated with the security group.
	IpPermissions []IpPermission

	// The outbound rules associated with the security group.
	IpPermissionsEgress []IpPermission

	// The Amazon Web Services account ID of the owner of the security group.
	OwnerId *string

	// Any tags assigned to the security group.
	Tags []Tag

	// The ID of the VPC for the security group.
	VpcId *string

	noSmithyDocumentSerde
}

// A security group that can be used by interfaces in the VPC.
type SecurityGroupForVpc struct {

	// The security group's description.
	Description *string

	// The security group ID.
	GroupId *string

	// The security group name.
	GroupName *string

	// The security group owner ID.
	OwnerId *string

	// The VPC ID in which the security group was created.
	PrimaryVpcId *string

	// The security group tags.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes a security group.
type SecurityGroupIdentifier struct {

	// The ID of the security group.
	GroupId *string

	// The name of the security group.
	GroupName *string

	noSmithyDocumentSerde
}

// Describes a VPC with a security group that references your security group.
type SecurityGroupReference struct {

	// The ID of your security group.
	GroupId *string

	// The ID of the VPC with the referencing security group.
	ReferencingVpcId *string

	// The ID of the transit gateway (if applicable). For more information about
	// security group referencing for transit gateways, see Create a transit gateway
	// attachment to a VPC (https://docs.aws.amazon.com/tgw/tgw-vpc-attachments.html#create-vpc-attachment)
	// in the Amazon Web Services Transit Gateway Guide.
	TransitGatewayId *string

	// The ID of the VPC peering connection (if applicable). For more information
	// about security group referencing for peering connections, see Update your
	// security groups to reference peer security groups (https://docs.aws.amazon.com/peering/vpc-peering-security-groups.html)
	// in the VPC Peering Guide.
	VpcPeeringConnectionId *string

	noSmithyDocumentSerde
}

// Describes a security group rule.
type SecurityGroupRule struct {

	// The IPv4 CIDR range.
	CidrIpv4 *string

	// The IPv6 CIDR range.
	CidrIpv6 *string

	// The security group rule description.
	Description *string

	// If the protocol is TCP or UDP, this is the start of the port range. If the
	// protocol is ICMP or ICMPv6, this is the type number. A value of -1 indicates all
	// ICMP/ICMPv6 types. If you specify all ICMP/ICMPv6 types, you must specify all
	// ICMP/ICMPv6 codes.
	FromPort *int32

	// The ID of the security group.
	GroupId *string

	// The ID of the Amazon Web Services account that owns the security group.
	GroupOwnerId *string

	// The IP protocol name ( tcp , udp , icmp , icmpv6 ) or number (see Protocol
	// Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)
	// ). Use -1 to specify all protocols.
	IpProtocol *string

	// Indicates whether the security group rule is an outbound rule.
	IsEgress *bool

	// The ID of the prefix list.
	PrefixListId *string

	// Describes the security group that is referenced in the rule.
	ReferencedGroupInfo *ReferencedSecurityGroup

	// The ID of the security group rule.
	SecurityGroupRuleId *string

	// The tags applied to the security group rule.
	Tags []Tag

	// If the protocol is TCP or UDP, this is the end of the port range. If the
	// protocol is ICMP or ICMPv6, this is the type number. A value of -1 indicates all
	// ICMP/ICMPv6 codes. If you specify all ICMP/ICMPv6 types, you must specify all
	// ICMP/ICMPv6 codes.
	ToPort *int32

	noSmithyDocumentSerde
}

// Describes the description of a security group rule. You can use this when you
// want to update the security group rule description for either an inbound or
// outbound rule.
type SecurityGroupRuleDescription struct {

	// The description of the security group rule.
	Description *string

	// The ID of the security group rule.
	SecurityGroupRuleId *string

	noSmithyDocumentSerde
}

// Describes a security group rule. You must specify exactly one of the following
// parameters, based on the rule type:
//   - CidrIpv4
//   - CidrIpv6
//   - PrefixListId
//   - ReferencedGroupId
//
// When you modify a rule, you cannot change the rule type. For example, if the
// rule uses an IPv4 address range, you must use CidrIpv4 to specify a new IPv4
// address range.
type SecurityGroupRuleRequest struct {

	// The IPv4 CIDR range. To specify a single IPv4 address, use the /32 prefix
	// length.
	CidrIpv4 *string

	// The IPv6 CIDR range. To specify a single IPv6 address, use the /128 prefix
	// length.
	CidrIpv6 *string

	// The description of the security group rule.
	Description *string

	// If the protocol is TCP or UDP, this is the start of the port range. If the
	// protocol is ICMP or ICMPv6, this is the type number. A value of -1 indicates all
	// ICMP/ICMPv6 types. If you specify all ICMP/ICMPv6 types, you must specify all
	// ICMP/ICMPv6 codes.
	FromPort *int32

	// The IP protocol name ( tcp , udp , icmp , icmpv6 ) or number (see Protocol
	// Numbers (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)
	// ). Use -1 to specify all protocols.
	IpProtocol *string

	// The ID of the prefix list.
	PrefixListId *string

	// The ID of the security group that is referenced in the security group rule.
	ReferencedGroupId *string

	// If the protocol is TCP or UDP, this is the end of the port range. If the
	// protocol is ICMP or ICMPv6, this is the code. A value of -1 indicates all
	// ICMP/ICMPv6 codes. If you specify all ICMP/ICMPv6 types, you must specify all
	// ICMP/ICMPv6 codes.
	ToPort *int32

	noSmithyDocumentSerde
}

// Describes an update to a security group rule.
type SecurityGroupRuleUpdate struct {

	// The ID of the security group rule.
	//
	// This member is required.
	SecurityGroupRuleId *string

	// Information about the security group rule.
	SecurityGroupRule *SecurityGroupRuleRequest

	noSmithyDocumentSerde
}

// Describes a service configuration for a VPC endpoint service.
type ServiceConfiguration struct {

	// Indicates whether requests from other Amazon Web Services accounts to create an
	// endpoint to the service must first be accepted.
	AcceptanceRequired *bool

	// The Availability Zones in which the service is available.
	AvailabilityZones []string

	// The DNS names for the service.
	BaseEndpointDnsNames []string

	// The Amazon Resource Names (ARNs) of the Gateway Load Balancers for the service.
	GatewayLoadBalancerArns []string

	// Indicates whether the service manages its VPC endpoints. Management of the
	// service VPC endpoints using the VPC endpoint API is restricted.
	ManagesVpcEndpoints *bool

	// The Amazon Resource Names (ARNs) of the Network Load Balancers for the service.
	NetworkLoadBalancerArns []string

	// The payer responsibility.
	PayerResponsibility PayerResponsibility

	// The private DNS name for the service.
	PrivateDnsName *string

	// Information about the endpoint service private DNS name configuration.
	PrivateDnsNameConfiguration *PrivateDnsNameConfiguration

	// The ID of the service.
	ServiceId *string

	// The name of the service.
	ServiceName *string

	// The service state.
	ServiceState ServiceState

	// The type of service.
	ServiceType []ServiceTypeDetail

	// The supported IP address types.
	SupportedIpAddressTypes []ServiceConnectivityType

	// The tags assigned to the service.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes a VPC endpoint service.
type ServiceDetail struct {

	// Indicates whether VPC endpoint connection requests to the service must be
	// accepted by the service owner.
	AcceptanceRequired *bool

	// The Availability Zones in which the service is available.
	AvailabilityZones []string

	// The DNS names for the service.
	BaseEndpointDnsNames []string

	// Indicates whether the service manages its VPC endpoints. Management of the
	// service VPC endpoints using the VPC endpoint API is restricted.
	ManagesVpcEndpoints *bool

	// The Amazon Web Services account ID of the service owner.
	Owner *string

	// The payer responsibility.
	PayerResponsibility PayerResponsibility

	// The private DNS name for the service.
	PrivateDnsName *string

	// The verification state of the VPC endpoint service. Consumers of the endpoint
	// service cannot use the private name when the state is not verified .
	PrivateDnsNameVerificationState DnsNameState

	// The private DNS names assigned to the VPC endpoint service.
	PrivateDnsNames []PrivateDnsDetails

	// The ID of the endpoint service.
	ServiceId *string

	// The name of the service.
	ServiceName *string

	// The type of service.
	ServiceType []ServiceTypeDetail

	// The supported IP address types.
	SupportedIpAddressTypes []ServiceConnectivityType

	// The tags assigned to the service.
	Tags []Tag

	// Indicates whether the service supports endpoint policies.
	VpcEndpointPolicySupported *bool

	noSmithyDocumentSerde
}

// Describes the type of service for a VPC endpoint.
type ServiceTypeDetail struct {

	// The type of service.
	ServiceType ServiceType

	noSmithyDocumentSerde
}

// Describes the time period for a Scheduled Instance to start its first schedule.
// The time period must span less than one day.
type SlotDateTimeRangeRequest struct {

	// The earliest date and time, in UTC, for the Scheduled Instance to start.
	//
	// This member is required.
	EarliestTime *time.Time

	// The latest date and time, in UTC, for the Scheduled Instance to start. This
	// value must be later than or equal to the earliest date and at most three months
	// in the future.
	//
	// This member is required.
	LatestTime *time.Time

	noSmithyDocumentSerde
}

// Describes the time period for a Scheduled Instance to start its first schedule.
type SlotStartTimeRangeRequest struct {

	// The earliest date and time, in UTC, for the Scheduled Instance to start.
	EarliestTime *time.Time

	// The latest date and time, in UTC, for the Scheduled Instance to start.
	LatestTime *time.Time

	noSmithyDocumentSerde
}

// Describes a snapshot.
type Snapshot struct {

	// The data encryption key identifier for the snapshot. This value is a unique
	// identifier that corresponds to the data encryption key that was used to encrypt
	// the original volume or snapshot copy. Because data encryption keys are inherited
	// by volumes created from snapshots, and vice versa, if snapshots share the same
	// data encryption key identifier, then they belong to the same volume/snapshot
	// lineage. This parameter is only returned by DescribeSnapshots .
	DataEncryptionKeyId *string

	// The description for the snapshot.
	Description *string

	// Indicates whether the snapshot is encrypted.
	Encrypted *bool

	// The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS key that
	// was used to protect the volume encryption key for the parent volume.
	KmsKeyId *string

	// The ARN of the Outpost on which the snapshot is stored. For more information,
	// see Amazon EBS local snapshots on Outposts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	OutpostArn *string

	// The Amazon Web Services owner alias, from an Amazon-maintained list ( amazon ).
	// This is not the user-configured Amazon Web Services account alias set using the
	// IAM console.
	OwnerAlias *string

	// The ID of the Amazon Web Services account that owns the EBS snapshot.
	OwnerId *string

	// The progress of the snapshot, as a percentage.
	Progress *string

	// Only for archived snapshots that are temporarily restored. Indicates the date
	// and time when a temporarily restored snapshot will be automatically re-archived.
	RestoreExpiryTime *time.Time

	// The ID of the snapshot. Each snapshot receives a unique identifier when it is
	// created.
	SnapshotId *string

	// Reserved for future use.
	SseType SSEType

	// The time stamp when the snapshot was initiated.
	StartTime *time.Time

	// The snapshot state.
	State SnapshotState

	// Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot copy
	// operation fails (for example, if the proper Key Management Service (KMS)
	// permissions are not obtained) this field displays error state details to help
	// you diagnose why the error occurred. This parameter is only returned by
	// DescribeSnapshots .
	StateMessage *string

	// The storage tier in which the snapshot is stored. standard indicates that the
	// snapshot is stored in the standard snapshot storage tier and that it is ready
	// for use. archive indicates that the snapshot is currently archived and that it
	// must be restored before it can be used.
	StorageTier StorageTier

	// Any tags assigned to the snapshot.
	Tags []Tag

	// The ID of the volume that was used to create the snapshot. Snapshots created by
	// the CopySnapshot action have an arbitrary volume ID that should not be used for
	// any purpose.
	VolumeId *string

	// The size of the volume, in GiB.
	VolumeSize *int32

	noSmithyDocumentSerde
}

// Describes the snapshot created from the imported disk.
type SnapshotDetail struct {

	// A description for the snapshot.
	Description *string

	// The block device mapping for the snapshot.
	DeviceName *string

	// The size of the disk in the snapshot, in GiB.
	DiskImageSize *float64

	// The format of the disk image from which the snapshot is created.
	Format *string

	// The percentage of progress for the task.
	Progress *string

	// The snapshot ID of the disk being imported.
	SnapshotId *string

	// A brief status of the snapshot creation.
	Status *string

	// A detailed status message for the snapshot creation.
	StatusMessage *string

	// The URL used to access the disk image.
	Url *string

	// The Amazon S3 bucket for the disk image.
	UserBucket *UserBucketDetails

	noSmithyDocumentSerde
}

// The disk container object for the import snapshot request.
type SnapshotDiskContainer struct {

	// The description of the disk image being imported.
	Description *string

	// The format of the disk image being imported. Valid values: VHD | VMDK | RAW
	Format *string

	// The URL to the Amazon S3-based disk image being imported. It can either be a
	// https URL (https://..) or an Amazon S3 URL (s3://..).
	Url *string

	// The Amazon S3 bucket for the disk image.
	UserBucket *UserBucket

	noSmithyDocumentSerde
}

// Information about a snapshot.
type SnapshotInfo struct {

	// Description specified by the CreateSnapshotRequest that has been applied to all
	// snapshots.
	Description *string

	// Indicates whether the snapshot is encrypted.
	Encrypted *bool

	// The ARN of the Outpost on which the snapshot is stored. For more information,
	// see Amazon EBS local snapshots on Outposts (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snapshots-outposts.html)
	// in the Amazon Elastic Compute Cloud User Guide.
	OutpostArn *string

	// Account id used when creating this snapshot.
	OwnerId *string

	// Progress this snapshot has made towards completing.
	Progress *string

	// Snapshot id that can be used to describe this snapshot.
	SnapshotId *string

	// Reserved for future use.
	SseType SSEType

	// Time this snapshot was started. This is the same for all snapshots initiated by
	// the same request.
	StartTime *time.Time

	// Current state of the snapshot.
	State SnapshotState

	// Tags associated with this snapshot.
	Tags []Tag

	// Source volume from which this snapshot was created.
	VolumeId *string

	// Size of the volume from which this snapshot was created.
	VolumeSize *int32

	noSmithyDocumentSerde
}

// Information about a snapshot that is currently in the Recycle Bin.
type SnapshotRecycleBinInfo struct {

	// The description for the snapshot.
	Description *string

	// The date and time when the snaphsot entered the Recycle Bin.
	RecycleBinEnterTime *time.Time

	// The date and time when the snapshot is to be permanently deleted from the
	// Recycle Bin.
	RecycleBinExitTime *time.Time

	// The ID of the snapshot.
	SnapshotId *string

	// The ID of the volume from which the snapshot was created.
	VolumeId *string

	noSmithyDocumentSerde
}

// Details about the import snapshot task.
type SnapshotTaskDetail struct {

	// The description of the snapshot.
	Description *string

	// The size of the disk in the snapshot, in GiB.
	DiskImageSize *float64

	// Indicates whether the snapshot is encrypted.
	Encrypted *bool

	// The format of the disk image from which the snapshot is created.
	Format *string

	// The identifier for the KMS key that was used to create the encrypted snapshot.
	KmsKeyId *string

	// The percentage of completion for the import snapshot task.
	Progress *string

	// The snapshot ID of the disk being imported.
	SnapshotId *string

	// A brief status for the import snapshot task.
	Status *string

	// A detailed status message for the import snapshot task.
	StatusMessage *string

	// The URL of the disk image from which the snapshot is created.
	Url *string

	// The Amazon S3 bucket for the disk image.
	UserBucket *UserBucketDetails

	noSmithyDocumentSerde
}

// Provides information about a snapshot's storage tier.
type SnapshotTierStatus struct {

	// The date and time when the last archive process was completed.
	ArchivalCompleteTime *time.Time

	// The status of the last archive or restore process.
	LastTieringOperationStatus TieringOperationStatus

	// A message describing the status of the last archive or restore process.
	LastTieringOperationStatusDetail *string

	// The progress of the last archive or restore process, as a percentage.
	LastTieringProgress *int32

	// The date and time when the last archive or restore process was started.
	LastTieringStartTime *time.Time

	// The ID of the Amazon Web Services account that owns the snapshot.
	OwnerId *string

	// Only for archived snapshots that are temporarily restored. Indicates the date
	// and time when a temporarily restored snapshot will be automatically re-archived.
	RestoreExpiryTime *time.Time

	// The ID of the snapshot.
	SnapshotId *string

	// The state of the snapshot.
	Status SnapshotState

	// The storage tier in which the snapshot is stored. standard indicates that the
	// snapshot is stored in the standard snapshot storage tier and that it is ready
	// for use. archive indicates that the snapshot is currently archived and that it
	// must be restored before it can be used.
	StorageTier StorageTier

	// The tags that are assigned to the snapshot.
	Tags []Tag

	// The ID of the volume from which the snapshot was created.
	VolumeId *string

	noSmithyDocumentSerde
}

// The Spot Instance replacement strategy to use when Amazon EC2 emits a signal
// that your Spot Instance is at an elevated risk of being interrupted. For more
// information, see Capacity rebalancing (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html)
// in the Amazon EC2 User Guide for Linux Instances.
type SpotCapacityRebalance struct {

	// The replacement strategy to use. Only available for fleets of type maintain .
	// launch - Spot Fleet launches a new replacement Spot Instance when a rebalance
	// notification is emitted for an existing Spot Instance in the fleet. Spot Fleet
	// does not terminate the instances that receive a rebalance notification. You can
	// terminate the old instances, or you can leave them running. You are charged for
	// all instances while they are running. launch-before-terminate - Spot Fleet
	// launches a new replacement Spot Instance when a rebalance notification is
	// emitted for an existing Spot Instance in the fleet, and then, after a delay that
	// you specify (in TerminationDelay ), terminates the instances that received a
	// rebalance notification.
	ReplacementStrategy ReplacementStrategy

	// The amount of time (in seconds) that Amazon EC2 waits before terminating the
	// old Spot Instance after launching a new replacement Spot Instance. Required when
	// ReplacementStrategy is set to launch-before-terminate . Not valid when
	// ReplacementStrategy is set to launch . Valid values: Minimum value of 120
	// seconds. Maximum value of 7200 seconds.
	TerminationDelay *int32

	noSmithyDocumentSerde
}

// Describes the data feed for a Spot Instance.
type SpotDatafeedSubscription struct {

	// The name of the Amazon S3 bucket where the Spot Instance data feed is located.
	Bucket *string

	// The fault codes for the Spot Instance request, if any.
	Fault *SpotInstanceStateFault

	// The Amazon Web Services account ID of the account.
	OwnerId *string

	// The prefix for the data feed files.
	Prefix *string

	// The state of the Spot Instance data feed subscription.
	State DatafeedSubscriptionState

	noSmithyDocumentSerde
}

// Describes the launch specification for one or more Spot Instances. If you
// include On-Demand capacity in your fleet request or want to specify an EFA
// network device, you can't use SpotFleetLaunchSpecification ; you must use
// LaunchTemplateConfig (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html)
// .
type SpotFleetLaunchSpecification struct {

	// Deprecated.
	AddressingType *string

	// One or more block devices that are mapped to the Spot Instances. You can't
	// specify both a snapshot ID and an encryption value. This is because only blank
	// volumes can be encrypted on creation. If a snapshot is the basis for a volume,
	// it is not blank and its encryption status is used for the volume encryption
	// status.
	BlockDeviceMappings []BlockDeviceMapping

	// Indicates whether the instances are optimized for EBS I/O. This optimization
	// provides dedicated throughput to Amazon EBS and an optimized configuration stack
	// to provide optimal EBS I/O performance. This optimization isn't available with
	// all instance types. Additional usage charges apply when using an EBS Optimized
	// instance. Default: false
	EbsOptimized *bool

	// The IAM instance profile.
	IamInstanceProfile *IamInstanceProfileSpecification

	// The ID of the AMI.
	ImageId *string

	// The attributes for the instance types. When you specify instance attributes,
	// Amazon EC2 will identify instance types with those attributes. If you specify
	// InstanceRequirements , you can't specify InstanceType .
	InstanceRequirements *InstanceRequirements

	// The instance type.
	InstanceType InstanceType

	// The ID of the kernel.
	KernelId *string

	// The name of the key pair.
	KeyName *string

	// Enable or disable monitoring for the instances.
	Monitoring *SpotFleetMonitoring

	// One or more network interfaces. If you specify a network interface, you must
	// specify subnet IDs and security group IDs using the network interface.
	// SpotFleetLaunchSpecification currently does not support Elastic Fabric Adapter
	// (EFA). To specify an EFA, you must use LaunchTemplateConfig (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_LaunchTemplateConfig.html)
	// .
	NetworkInterfaces []InstanceNetworkInterfaceSpecification

	// The placement information.
	Placement *SpotPlacement

	// The ID of the RAM disk. Some kernels require additional drivers at launch.
	// Check the kernel requirements for information about whether you need to specify
	// a RAM disk. To find kernel requirements, refer to the Amazon Web Services
	// Resource Center and search for the kernel ID.
	RamdiskId *string

	// The security groups.
	SecurityGroups []GroupIdentifier

	// The maximum price per unit hour that you are willing to pay for a Spot
	// Instance. We do not recommend using this parameter because it can lead to
	// increased interruptions. If you do not specify this parameter, you will pay the
	// current Spot price. If you specify a maximum price, your instances will be
	// interrupted more frequently than if you do not specify this parameter.
	SpotPrice *string

	// The IDs of the subnets in which to launch the instances. To specify multiple
	// subnets, separate them using commas; for example, "subnet-1234abcdeexample1,
	// subnet-0987cdef6example2".
	SubnetId *string

	// The tags to apply during creation.
	TagSpecifications []SpotFleetTagSpecification

	// The base64-encoded user data that instances use when starting up. User data is
	// limited to 16 KB.
	UserData *string

	// The number of units provided by the specified instance type. These are the same
	// units that you chose to set the target capacity in terms of instances, or a
	// performance characteristic such as vCPUs, memory, or I/O. If the target capacity
	// divided by this value is not a whole number, Amazon EC2 rounds the number of
	// instances to the next whole number. If this value is not specified, the default
	// is 1.
	WeightedCapacity *float64

	noSmithyDocumentSerde
}

// Describes whether monitoring is enabled.
type SpotFleetMonitoring struct {

	// Enables monitoring for the instance. Default: false
	Enabled *bool

	noSmithyDocumentSerde
}

// Describes a Spot Fleet request.
type SpotFleetRequestConfig struct {

	// The progress of the Spot Fleet request. If there is an error, the status is
	// error . After all requests are placed, the status is pending_fulfillment . If
	// the size of the fleet is equal to or greater than its target capacity, the
	// status is fulfilled . If the size of the fleet is decreased, the status is
	// pending_termination while Spot Instances are terminating.
	ActivityStatus ActivityStatus

	// The creation date and time of the request.
	CreateTime *time.Time

	// The configuration of the Spot Fleet request.
	SpotFleetRequestConfig *SpotFleetRequestConfigData

	// The ID of the Spot Fleet request.
	SpotFleetRequestId *string

	// The state of the Spot Fleet request.
	SpotFleetRequestState BatchState

	// The tags for a Spot Fleet resource.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes the configuration of a Spot Fleet request.
type SpotFleetRequestConfigData struct {

	// The Amazon Resource Name (ARN) of an Identity and Access Management (IAM) role
	// that grants the Spot Fleet the permission to request, launch, terminate, and tag
	// instances on your behalf. For more information, see Spot Fleet prerequisites (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html#spot-fleet-prerequisites)
	// in the Amazon EC2 User Guide. Spot Fleet can terminate Spot Instances on your
	// behalf when you cancel its Spot Fleet request using CancelSpotFleetRequests (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CancelSpotFleetRequests)
	// or when the Spot Fleet request expires, if you set
	// TerminateInstancesWithExpiration .
	//
	// This member is required.
	IamFleetRole *string

	// The number of units to request for the Spot Fleet. You can choose to set the
	// target capacity in terms of instances or a performance characteristic that is
	// important to your application workload, such as vCPUs, memory, or I/O. If the
	// request type is maintain , you can specify a target capacity of 0 and add
	// capacity later.
	//
	// This member is required.
	TargetCapacity *int32

	// The strategy that determines how to allocate the target Spot Instance capacity
	// across the Spot Instance pools specified by the Spot Fleet launch configuration.
	// For more information, see Allocation strategies for Spot Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-allocation-strategy.html)
	// in the Amazon EC2 User Guide. priceCapacityOptimized (recommended) Spot Fleet
	// identifies the pools with the highest capacity availability for the number of
	// instances that are launching. This means that we will request Spot Instances
	// from the pools that we believe have the lowest chance of interruption in the
	// near term. Spot Fleet then requests Spot Instances from the lowest priced of
	// these pools. capacityOptimized Spot Fleet identifies the pools with the highest
	// capacity availability for the number of instances that are launching. This means
	// that we will request Spot Instances from the pools that we believe have the
	// lowest chance of interruption in the near term. To give certain instance types a
	// higher chance of launching first, use capacityOptimizedPrioritized . Set a
	// priority for each instance type by using the Priority parameter for
	// LaunchTemplateOverrides . You can assign the same priority to different
	// LaunchTemplateOverrides . EC2 implements the priorities on a best-effort basis,
	// but optimizes for capacity first. capacityOptimizedPrioritized is supported
	// only if your Spot Fleet uses a launch template. Note that if the
	// OnDemandAllocationStrategy is set to prioritized , the same priority is applied
	// when fulfilling On-Demand capacity. diversified Spot Fleet requests instances
	// from all of the Spot Instance pools that you specify. lowestPrice Spot Fleet
	// requests instances from the lowest priced Spot Instance pool that has available
	// capacity. If the lowest priced pool doesn't have available capacity, the Spot
	// Instances come from the next lowest priced pool that has available capacity. If
	// a pool runs out of capacity before fulfilling your desired capacity, Spot Fleet
	// will continue to fulfill your request by drawing from the next lowest priced
	// pool. To ensure that your desired capacity is met, you might receive Spot
	// Instances from several pools. Because this strategy only considers instance
	// price and not capacity availability, it might lead to high interruption rates.
	// Default: lowestPrice
	AllocationStrategy AllocationStrategy

	// A unique, case-sensitive identifier that you provide to ensure the idempotency
	// of your listings. This helps to avoid duplicate listings. For more information,
	// see Ensuring Idempotency (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html)
	// .
	ClientToken *string

	// Reserved.
	Context *string

	// Indicates whether running instances should be terminated if you decrease the
	// target capacity of the Spot Fleet request below the current size of the Spot
	// Fleet. Supported only for fleets of type maintain .
	ExcessCapacityTerminationPolicy ExcessCapacityTerminationPolicy

	// The number of units fulfilled by this request compared to the set target
	// capacity. You cannot set this value.
	FulfilledCapacity *float64

	// The behavior when a Spot Instance is interrupted. The default is terminate .
	InstanceInterruptionBehavior InstanceInterruptionBehavior

	// The number of Spot pools across which to allocate your target Spot capacity.
	// Valid only when Spot AllocationStrategy is set to lowest-price . Spot Fleet
	// selects the cheapest Spot pools and evenly allocates your target Spot capacity
	// across the number of Spot pools that you specify. Note that Spot Fleet attempts
	// to draw Spot Instances from the number of pools that you specify on a best
	// effort basis. If a pool runs out of Spot capacity before fulfilling your target
	// capacity, Spot Fleet will continue to fulfill your request by drawing from the
	// next cheapest pool. To ensure that your target capacity is met, you might
	// receive Spot Instances from more than the number of pools that you specified.
	// Similarly, if most of the pools have no Spot capacity, you might receive your
	// full target capacity from fewer than the number of pools that you specified.
	InstancePoolsToUseCount *int32

	// The launch specifications for the Spot Fleet request. If you specify
	// LaunchSpecifications , you can't specify LaunchTemplateConfigs . If you include
	// On-Demand capacity in your request, you must use LaunchTemplateConfigs .
	LaunchSpecifications []SpotFleetLaunchSpecification

	// The launch template and overrides. If you specify LaunchTemplateConfigs , you
	// can't specify LaunchSpecifications . If you include On-Demand capacity in your
	// request, you must use LaunchTemplateConfigs .
	LaunchTemplateConfigs []LaunchTemplateConfig

	// One or more Classic Load Balancers and target groups to attach to the Spot
	// Fleet request. Spot Fleet registers the running Spot Instances with the
	// specified Classic Load Balancers and target groups. With Network Load Balancers,
	// Spot Fleet cannot register instances that have the following instance types: C1,
	// CC1, CC2, CG1, CG2, CR1, CS1, G1, G2, HI1, HS1, M1, M2, M3, and T1.
	LoadBalancersConfig *LoadBalancersConfig

	// The order of the launch template overrides to use in fulfilling On-Demand
	// capacity. If you specify lowestPrice , Spot Fleet uses price to determine the
	// order, launching the lowest price first. If you specify prioritized , Spot Fleet
	// uses the priority that you assign to each Spot Fleet launch template override,
	// launching the highest priority first. If you do not specify a value, Spot Fleet
	// defaults to lowestPrice .
	OnDemandAllocationStrategy OnDemandAllocationStrategy

	// The number of On-Demand units fulfilled by this request compared to the set
	// target On-Demand capacity.
	OnDemandFulfilledCapacity *float64

	// The maximum amount per hour for On-Demand Instances that you're willing to pay.
	// You can use the onDemandMaxTotalPrice parameter, the spotMaxTotalPrice
	// parameter, or both parameters to ensure that your fleet cost does not exceed
	// your budget. If you set a maximum price per hour for the On-Demand Instances and
	// Spot Instances in your request, Spot Fleet will launch instances until it
	// reaches the maximum amount you're willing to pay. When the maximum amount you're
	// willing to pay is reached, the fleet stops launching instances even if it hasn’t
	// met the target capacity. If your fleet includes T instances that are configured
	// as unlimited , and if their average CPU usage exceeds the baseline utilization,
	// you will incur a charge for surplus credits. The onDemandMaxTotalPrice does not
	// account for surplus credits, and, if you use surplus credits, your final cost
	// might be higher than what you specified for onDemandMaxTotalPrice . For more
	// information, see Surplus credits can incur charges (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits)
	// in the EC2 User Guide.
	OnDemandMaxTotalPrice *string

	// The number of On-Demand units to request. You can choose to set the target
	// capacity in terms of instances or a performance characteristic that is important
	// to your application workload, such as vCPUs, memory, or I/O. If the request type
	// is maintain , you can specify a target capacity of 0 and add capacity later.
	OnDemandTargetCapacity *int32

	// Indicates whether Spot Fleet should replace unhealthy instances.
	ReplaceUnhealthyInstances *bool

	// The strategies for managing your Spot Instances that are at an elevated risk of
	// being interrupted.
	SpotMaintenanceStrategies *SpotMaintenanceStrategies

	// The maximum amount per hour for Spot Instances that you're willing to pay. You
	// can use the spotMaxTotalPrice parameter, the onDemandMaxTotalPrice parameter,
	// or both parameters to ensure that your fleet cost does not exceed your budget.
	// If you set a maximum price per hour for the On-Demand Instances and Spot
	// Instances in your request, Spot Fleet will launch instances until it reaches the
	// maximum amount you're willing to pay. When the maximum amount you're willing to
	// pay is reached, the fleet stops launching instances even if it hasn’t met the
	// target capacity. If your fleet includes T instances that are configured as
	// unlimited , and if their average CPU usage exceeds the baseline utilization, you
	// will incur a charge for surplus credits. The spotMaxTotalPrice does not account
	// for surplus credits, and, if you use surplus credits, your final cost might be
	// higher than what you specified for spotMaxTotalPrice . For more information, see
	// Surplus credits can incur charges (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits)
	// in the EC2 User Guide.
	SpotMaxTotalPrice *string

	// The maximum price per unit hour that you are willing to pay for a Spot
	// Instance. We do not recommend using this parameter because it can lead to
	// increased interruptions. If you do not specify this parameter, you will pay the
	// current Spot price. If you specify a maximum price, your instances will be
	// interrupted more frequently than if you do not specify this parameter.
	SpotPrice *string

	// The key-value pair for tagging the Spot Fleet request on creation. The value
	// for ResourceType must be spot-fleet-request , otherwise the Spot Fleet request
	// fails. To tag instances at launch, specify the tags in the launch template (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-templates.html#create-launch-template)
	// (valid only if you use LaunchTemplateConfigs ) or in the
	// SpotFleetTagSpecification (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetTagSpecification.html)
	// (valid only if you use LaunchSpecifications ). For information about tagging
	// after launch, see Tag your resources (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-resources)
	// .
	TagSpecifications []TagSpecification

	// The unit for the target capacity. You can specify this parameter only when
	// using attribute-based instance type selection. Default: units (the number of
	// instances)
	TargetCapacityUnitType TargetCapacityUnitType

	// Indicates whether running Spot Instances are terminated when the Spot Fleet
	// request expires.
	TerminateInstancesWithExpiration *bool

	// The type of request. Indicates whether the Spot Fleet only requests the target
	// capacity or also attempts to maintain it. When this value is request , the Spot
	// Fleet only places the required requests. It does not attempt to replenish Spot
	// Instances if capacity is diminished, nor does it submit requests in alternative
	// Spot pools if capacity is not available. When this value is maintain , the Spot
	// Fleet maintains the target capacity. The Spot Fleet places the required requests
	// to meet capacity and automatically replenishes any interrupted instances.
	// Default: maintain . instant is listed but is not used by Spot Fleet.
	Type FleetType

	// The start date and time of the request, in UTC format (YYYY-MM-DDTHH:MM:SSZ).
	// By default, Amazon EC2 starts fulfilling the request immediately.
	ValidFrom *time.Time

	// The end date and time of the request, in UTC format (YYYY-MM-DDTHH:MM:SSZ).
	// After the end date and time, no new Spot Instance requests are placed or able to
	// fulfill the request. If no value is specified, the Spot Fleet request remains
	// until you cancel it.
	ValidUntil *time.Time

	noSmithyDocumentSerde
}

// The tags for a Spot Fleet resource.
type SpotFleetTagSpecification struct {

	// The type of resource. Currently, the only resource type that is supported is
	// instance . To tag the Spot Fleet request on creation, use the TagSpecifications
	// parameter in SpotFleetRequestConfigData (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotFleetRequestConfigData.html)
	// .
	ResourceType ResourceType

	// The tags.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes a Spot Instance request.
type SpotInstanceRequest struct {

	// Deprecated.
	ActualBlockHourlyPrice *string

	// The Availability Zone group. If you specify the same Availability Zone group
	// for all Spot Instance requests, all Spot Instances are launched in the same
	// Availability Zone.
	AvailabilityZoneGroup *string

	// Deprecated.
	BlockDurationMinutes *int32

	// The date and time when the Spot Instance request was created, in UTC format
	// (for example, YYYY-MM-DDTHH:MM:SSZ).
	CreateTime *time.Time

	// The fault codes for the Spot Instance request, if any.
	Fault *SpotInstanceStateFault

	// The instance ID, if an instance has been launched to fulfill the Spot Instance
	// request.
	InstanceId *string

	// The behavior when a Spot Instance is interrupted.
	InstanceInterruptionBehavior InstanceInterruptionBehavior

	// The instance launch group. Launch groups are Spot Instances that launch
	// together and terminate together.
	LaunchGroup *string

	// Additional information for launching instances.
	LaunchSpecification *LaunchSpecification

	// The Availability Zone in which the request is launched.
	LaunchedAvailabilityZone *string

	// The product description associated with the Spot Instance.
	ProductDescription RIProductDescription

	// The ID of the Spot Instance request.
	SpotInstanceRequestId *string

	// The maximum price per unit hour that you are willing to pay for a Spot
	// Instance. We do not recommend using this parameter because it can lead to
	// increased interruptions. If you do not specify this parameter, you will pay the
	// current Spot price. If you specify a maximum price, your instances will be
	// interrupted more frequently than if you do not specify this parameter.
	SpotPrice *string

	// The state of the Spot Instance request. Spot request status information helps
	// track your Spot Instance requests. For more information, see Spot request status (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html)
	// in the Amazon EC2 User Guide for Linux Instances.
	State SpotInstanceState

	// The status code and status message describing the Spot Instance request.
	Status *SpotInstanceStatus

	// Any tags assigned to the resource.
	Tags []Tag

	// The Spot Instance request type.
	Type SpotInstanceType

	// The start date of the request, in UTC format (for example,
	// YYYY-MM-DDTHH:MM:SSZ). The request becomes active at this date and time.
	ValidFrom *time.Time

	// The end date of the request, in UTC format (YYYY-MM-DDTHH:MM:SSZ).
	//   - For a persistent request, the request remains active until the validUntil
	//   date and time is reached. Otherwise, the request remains active until you cancel
	//   it.
	//   - For a one-time request, the request remains active until all instances
	//   launch, the request is canceled, or the validUntil date and time is reached.
	//   By default, the request is valid for 7 days from the date the request was
	//   created.
	ValidUntil *time.Time

	noSmithyDocumentSerde
}

// Describes a Spot Instance state change.
type SpotInstanceStateFault struct {

	// The reason code for the Spot Instance state change.
	Code *string

	// The message for the Spot Instance state change.
	Message *string

	noSmithyDocumentSerde
}

// Describes the status of a Spot Instance request.
type SpotInstanceStatus struct {

	// The status code. For a list of status codes, see Spot request status codes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-request-status.html#spot-instance-request-status-understand)
	// in the Amazon EC2 User Guide for Linux Instances.
	Code *string

	// The description for the status code.
	Message *string

	// The date and time of the most recent status update, in UTC format (for example,
	// YYYY-MM-DDTHH:MM:SSZ).
	UpdateTime *time.Time

	noSmithyDocumentSerde
}

// The strategies for managing your Spot Instances that are at an elevated risk of
// being interrupted.
type SpotMaintenanceStrategies struct {

	// The Spot Instance replacement strategy to use when Amazon EC2 emits a signal
	// that your Spot Instance is at an elevated risk of being interrupted. For more
	// information, see Capacity rebalancing (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-capacity-rebalance.html)
	// in the Amazon EC2 User Guide for Linux Instances.
	CapacityRebalance *SpotCapacityRebalance

	noSmithyDocumentSerde
}

// The options for Spot Instances.
type SpotMarketOptions struct {

	// Deprecated.
	BlockDurationMinutes *int32

	// The behavior when a Spot Instance is interrupted. If Configured (for
	// HibernationOptions (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_HibernationOptionsRequest.html)
	// ) is set to true , the InstanceInterruptionBehavior parameter is automatically
	// set to hibernate . If you set it to stop or terminate , you'll get an error. If
	// Configured (for HibernationOptions (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_HibernationOptionsRequest.html)
	// ) is set to false or null , the InstanceInterruptionBehavior parameter is
	// automatically set to terminate . You can also set it to stop or hibernate . For
	// more information, see Interruption behavior (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/interruption-behavior.html)
	// in the Amazon EC2 User Guide.
	InstanceInterruptionBehavior InstanceInterruptionBehavior

	// The maximum hourly price that you're willing to pay for a Spot Instance. We do
	// not recommend using this parameter because it can lead to increased
	// interruptions. If you do not specify this parameter, you will pay the current
	// Spot price. If you specify a maximum price, your Spot Instances will be
	// interrupted more frequently than if you do not specify this parameter.
	MaxPrice *string

	// The Spot Instance request type. For RunInstances (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances)
	// , persistent Spot Instance requests are only supported when the instance
	// interruption behavior is either hibernate or stop .
	SpotInstanceType SpotInstanceType

	// The end date of the request, in UTC format (YYYY-MM-DDTHH:MM:SSZ). Supported
	// only for persistent requests.
	//   - For a persistent request, the request remains active until the ValidUntil
	//   date and time is reached. Otherwise, the request remains active until you cancel
	//   it.
	//   - For a one-time request, ValidUntil is not supported. The request remains
	//   active until all instances launch or you cancel the request.
	ValidUntil *time.Time

	noSmithyDocumentSerde
}

// Describes the configuration of Spot Instances in an EC2 Fleet.
type SpotOptions struct {

	// The strategy that determines how to allocate the target Spot Instance capacity
	// across the Spot Instance pools specified by the EC2 Fleet launch configuration.
	// For more information, see Allocation strategies for Spot Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html)
	// in the Amazon EC2 User Guide. price-capacity-optimized (recommended) EC2 Fleet
	// identifies the pools with the highest capacity availability for the number of
	// instances that are launching. This means that we will request Spot Instances
	// from the pools that we believe have the lowest chance of interruption in the
	// near term. EC2 Fleet then requests Spot Instances from the lowest priced of
	// these pools. capacity-optimized EC2 Fleet identifies the pools with the highest
	// capacity availability for the number of instances that are launching. This means
	// that we will request Spot Instances from the pools that we believe have the
	// lowest chance of interruption in the near term. To give certain instance types a
	// higher chance of launching first, use capacity-optimized-prioritized . Set a
	// priority for each instance type by using the Priority parameter for
	// LaunchTemplateOverrides . You can assign the same priority to different
	// LaunchTemplateOverrides . EC2 implements the priorities on a best-effort basis,
	// but optimizes for capacity first. capacity-optimized-prioritized is supported
	// only if your EC2 Fleet uses a launch template. Note that if the On-Demand
	// AllocationStrategy is set to prioritized , the same priority is applied when
	// fulfilling On-Demand capacity. diversified EC2 Fleet requests instances from all
	// of the Spot Instance pools that you specify. lowest-price EC2 Fleet requests
	// instances from the lowest priced Spot Instance pool that has available capacity.
	// If the lowest priced pool doesn't have available capacity, the Spot Instances
	// come from the next lowest priced pool that has available capacity. If a pool
	// runs out of capacity before fulfilling your desired capacity, EC2 Fleet will
	// continue to fulfill your request by drawing from the next lowest priced pool. To
	// ensure that your desired capacity is met, you might receive Spot Instances from
	// several pools. Because this strategy only considers instance price and not
	// capacity availability, it might lead to high interruption rates. Default:
	// lowest-price
	AllocationStrategy SpotAllocationStrategy

	// The behavior when a Spot Instance is interrupted. Default: terminate
	InstanceInterruptionBehavior SpotInstanceInterruptionBehavior

	// The number of Spot pools across which to allocate your target Spot capacity.
	// Supported only when AllocationStrategy is set to lowest-price . EC2 Fleet
	// selects the cheapest Spot pools and evenly allocates your target Spot capacity
	// across the number of Spot pools that you specify. Note that EC2 Fleet attempts
	// to draw Spot Instances from the number of pools that you specify on a best
	// effort basis. If a pool runs out of Spot capacity before fulfilling your target
	// capacity, EC2 Fleet will continue to fulfill your request by drawing from the
	// next cheapest pool. To ensure that your target capacity is met, you might
	// receive Spot Instances from more than the number of pools that you specified.
	// Similarly, if most of the pools have no Spot capacity, you might receive your
	// full target capacity from fewer than the number of pools that you specified.
	InstancePoolsToUseCount *int32

	// The strategies for managing your workloads on your Spot Instances that will be
	// interrupted. Currently only the capacity rebalance strategy is available.
	MaintenanceStrategies *FleetSpotMaintenanceStrategies

	// The maximum amount per hour for Spot Instances that you're willing to pay. We
	// do not recommend using this parameter because it can lead to increased
	// interruptions. If you do not specify this parameter, you will pay the current
	// Spot price. If you specify a maximum price, your Spot Instances will be
	// interrupted more frequently than if you do not specify this parameter. If your
	// fleet includes T instances that are configured as unlimited , and if their
	// average CPU usage exceeds the baseline utilization, you will incur a charge for
	// surplus credits. The maxTotalPrice does not account for surplus credits, and,
	// if you use surplus credits, your final cost might be higher than what you
	// specified for maxTotalPrice . For more information, see Surplus credits can
	// incur charges (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits)
	// in the EC2 User Guide.
	MaxTotalPrice *string

	// The minimum target capacity for Spot Instances in the fleet. If the minimum
	// target capacity is not reached, the fleet launches no instances. Supported only
	// for fleets of type instant . At least one of the following must be specified:
	// SingleAvailabilityZone | SingleInstanceType
	MinTargetCapacity *int32

	// Indicates that the fleet launches all Spot Instances into a single Availability
	// Zone. Supported only for fleets of type instant .
	SingleAvailabilityZone *bool

	// Indicates that the fleet uses a single instance type to launch all Spot
	// Instances in the fleet. Supported only for fleets of type instant .
	SingleInstanceType *bool

	noSmithyDocumentSerde
}

// Describes the configuration of Spot Instances in an EC2 Fleet request.
type SpotOptionsRequest struct {

	// The strategy that determines how to allocate the target Spot Instance capacity
	// across the Spot Instance pools specified by the EC2 Fleet launch configuration.
	// For more information, see Allocation strategies for Spot Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html)
	// in the Amazon EC2 User Guide. price-capacity-optimized (recommended) EC2 Fleet
	// identifies the pools with the highest capacity availability for the number of
	// instances that are launching. This means that we will request Spot Instances
	// from the pools that we believe have the lowest chance of interruption in the
	// near term. EC2 Fleet then requests Spot Instances from the lowest priced of
	// these pools. capacity-optimized EC2 Fleet identifies the pools with the highest
	// capacity availability for the number of instances that are launching. This means
	// that we will request Spot Instances from the pools that we believe have the
	// lowest chance of interruption in the near term. To give certain instance types a
	// higher chance of launching first, use capacity-optimized-prioritized . Set a
	// priority for each instance type by using the Priority parameter for
	// LaunchTemplateOverrides . You can assign the same priority to different
	// LaunchTemplateOverrides . EC2 implements the priorities on a best-effort basis,
	// but optimizes for capacity first. capacity-optimized-prioritized is supported
	// only if your EC2 Fleet uses a launch template. Note that if the On-Demand
	// AllocationStrategy is set to prioritized , the same priority is applied when
	// fulfilling On-Demand capacity. diversified EC2 Fleet requests instances from all
	// of the Spot Instance pools that you specify. lowest-price EC2 Fleet requests
	// instances from the lowest priced Spot Instance pool that has available capacity.
	// If the lowest priced pool doesn't have available capacity, the Spot Instances
	// come from the next lowest priced pool that has available capacity. If a pool
	// runs out of capacity before fulfilling your desired capacity, EC2 Fleet will
	// continue to fulfill your request by drawing from the next lowest priced pool. To
	// ensure that your desired capacity is met, you might receive Spot Instances from
	// several pools. Because this strategy only considers instance price and not
	// capacity availability, it might lead to high interruption rates. Default:
	// lowest-price
	AllocationStrategy SpotAllocationStrategy

	// The behavior when a Spot Instance is interrupted. Default: terminate
	InstanceInterruptionBehavior SpotInstanceInterruptionBehavior

	// The number of Spot pools across which to allocate your target Spot capacity.
	// Supported only when Spot AllocationStrategy is set to lowest-price . EC2 Fleet
	// selects the cheapest Spot pools and evenly allocates your target Spot capacity
	// across the number of Spot pools that you specify. Note that EC2 Fleet attempts
	// to draw Spot Instances from the number of pools that you specify on a best
	// effort basis. If a pool runs out of Spot capacity before fulfilling your target
	// capacity, EC2 Fleet will continue to fulfill your request by drawing from the
	// next cheapest pool. To ensure that your target capacity is met, you might
	// receive Spot Instances from more than the number of pools that you specified.
	// Similarly, if most of the pools have no Spot capacity, you might receive your
	// full target capacity from fewer than the number of pools that you specified.
	InstancePoolsToUseCount *int32

	// The strategies for managing your Spot Instances that are at an elevated risk of
	// being interrupted.
	MaintenanceStrategies *FleetSpotMaintenanceStrategiesRequest

	// The maximum amount per hour for Spot Instances that you're willing to pay. We
	// do not recommend using this parameter because it can lead to increased
	// interruptions. If you do not specify this parameter, you will pay the current
	// Spot price. If you specify a maximum price, your Spot Instances will be
	// interrupted more frequently than if you do not specify this parameter. If your
	// fleet includes T instances that are configured as unlimited , and if their
	// average CPU usage exceeds the baseline utilization, you will incur a charge for
	// surplus credits. The MaxTotalPrice does not account for surplus credits, and,
	// if you use surplus credits, your final cost might be higher than what you
	// specified for MaxTotalPrice . For more information, see Surplus credits can
	// incur charges (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-unlimited-mode-concepts.html#unlimited-mode-surplus-credits)
	// in the EC2 User Guide.
	MaxTotalPrice *string

	// The minimum target capacity for Spot Instances in the fleet. If the minimum
	// target capacity is not reached, the fleet launches no instances. Supported only
	// for fleets of type instant . At least one of the following must be specified:
	// SingleAvailabilityZone | SingleInstanceType
	MinTargetCapacity *int32

	// Indicates that the fleet launches all Spot Instances into a single Availability
	// Zone. Supported only for fleets of type instant .
	SingleAvailabilityZone *bool

	// Indicates that the fleet uses a single instance type to launch all Spot
	// Instances in the fleet. Supported only for fleets of type instant .
	SingleInstanceType *bool

	noSmithyDocumentSerde
}

// Describes Spot Instance placement.
type SpotPlacement struct {

	// The Availability Zone. [Spot Fleet only] To specify multiple Availability
	// Zones, separate them using commas; for example, "us-west-2a, us-west-2b".
	AvailabilityZone *string

	// The name of the placement group.
	GroupName *string

	// The tenancy of the instance (if the instance is running in a VPC). An instance
	// with a tenancy of dedicated runs on single-tenant hardware. The host tenancy is
	// not supported for Spot Instances.
	Tenancy Tenancy

	noSmithyDocumentSerde
}

// The Spot placement score for this Region or Availability Zone. The score is
// calculated based on the assumption that the capacity-optimized allocation
// strategy is used and that all of the Availability Zones in the Region can be
// used.
type SpotPlacementScore struct {

	// The Availability Zone.
	AvailabilityZoneId *string

	// The Region.
	Region *string

	// The placement score, on a scale from 1 to 10 . A score of 10 indicates that
	// your Spot request is highly likely to succeed in this Region or Availability
	// Zone. A score of 1 indicates that your Spot request is not likely to succeed.
	Score *int32

	noSmithyDocumentSerde
}

// The maximum price per unit hour that you are willing to pay for a Spot
// Instance. We do not recommend using this parameter because it can lead to
// increased interruptions. If you do not specify this parameter, you will pay the
// current Spot price. If you specify a maximum price, your instances will be
// interrupted more frequently than if you do not specify this parameter.
type SpotPrice struct {

	// The Availability Zone.
	AvailabilityZone *string

	// The instance type.
	InstanceType InstanceType

	// A general description of the AMI.
	ProductDescription RIProductDescription

	// The maximum price per unit hour that you are willing to pay for a Spot
	// Instance. We do not recommend using this parameter because it can lead to
	// increased interruptions. If you do not specify this parameter, you will pay the
	// current Spot price. If you specify a maximum price, your instances will be
	// interrupted more frequently than if you do not specify this parameter.
	SpotPrice *string

	// The date and time the request was created, in UTC format (for example,
	// YYYY-MM-DDTHH:MM:SSZ).
	Timestamp *time.Time

	noSmithyDocumentSerde
}

// Describes a stale rule in a security group.
type StaleIpPermission struct {

	// The start of the port range for the TCP and UDP protocols, or an ICMP type
	// number. A value of -1 indicates all ICMP types.
	FromPort *int32

	// The IP protocol name (for tcp , udp , and icmp ) or number (see Protocol
	// Numbers) (http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)
	// .
	IpProtocol *string

	// The IP ranges. Not applicable for stale security group rules.
	IpRanges []string

	// The prefix list IDs. Not applicable for stale security group rules.
	PrefixListIds []string

	// The end of the port range for the TCP and UDP protocols, or an ICMP type
	// number. A value of -1 indicates all ICMP types.
	ToPort *int32

	// The security group pairs. Returns the ID of the referenced security group and
	// VPC, and the ID and status of the VPC peering connection.
	UserIdGroupPairs []UserIdGroupPair

	noSmithyDocumentSerde
}

// Describes a stale security group (a security group that contains stale rules).
type StaleSecurityGroup struct {

	// The description of the security group.
	Description *string

	// The ID of the security group.
	GroupId *string

	// The name of the security group.
	GroupName *string

	// Information about the stale inbound rules in the security group.
	StaleIpPermissions []StaleIpPermission

	// Information about the stale outbound rules in the security group.
	StaleIpPermissionsEgress []StaleIpPermission

	// The ID of the VPC for the security group.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes a state change.
type StateReason struct {

	// The reason code for the state change.
	Code *string

	// The message for the state change.
	//   - Server.InsufficientInstanceCapacity : There was insufficient capacity
	//   available to satisfy the launch request.
	//   - Server.InternalError : An internal error caused the instance to terminate
	//   during launch.
	//   - Server.ScheduledStop : The instance was stopped due to a scheduled
	//   retirement.
	//   - Server.SpotInstanceShutdown : The instance was stopped because the number of
	//   Spot requests with a maximum price equal to or higher than the Spot price
	//   exceeded available capacity or because of an increase in the Spot price.
	//   - Server.SpotInstanceTermination : The instance was terminated because the
	//   number of Spot requests with a maximum price equal to or higher than the Spot
	//   price exceeded available capacity or because of an increase in the Spot price.
	//   - Client.InstanceInitiatedShutdown : The instance was shut down from the
	//   operating system of the instance.
	//   - Client.InstanceTerminated : The instance was terminated or rebooted during
	//   AMI creation.
	//   - Client.InternalError : A client error caused the instance to terminate
	//   during launch.
	//   - Client.InvalidSnapshot.NotFound : The specified snapshot was not found.
	//   - Client.UserInitiatedHibernate : Hibernation was initiated on the instance.
	//   - Client.UserInitiatedShutdown : The instance was shut down using the Amazon
	//   EC2 API.
	//   - Client.VolumeLimitExceeded : The limit on the number of EBS volumes or total
	//   storage was exceeded. Decrease usage or request an increase in your account
	//   limits.
	Message *string

	noSmithyDocumentSerde
}

// Describes the storage location for an instance store-backed AMI.
type Storage struct {

	// An Amazon S3 storage location.
	S3 *S3Storage

	noSmithyDocumentSerde
}

// Describes a storage location in Amazon S3.
type StorageLocation struct {

	// The name of the S3 bucket.
	Bucket *string

	// The key.
	Key *string

	noSmithyDocumentSerde
}

// The information about the AMI store task, including the progress of the task.
type StoreImageTaskResult struct {

	// The ID of the AMI that is being stored.
	AmiId *string

	// The name of the Amazon S3 bucket that contains the stored AMI object.
	Bucket *string

	// The progress of the task as a percentage.
	ProgressPercentage *int32

	// The name of the stored AMI object in the bucket.
	S3objectKey *string

	// If the tasks fails, the reason for the failure is returned. If the task
	// succeeds, null is returned.
	StoreTaskFailureReason *string

	// The state of the store task ( InProgress , Completed , or Failed ).
	StoreTaskState *string

	// The time the task started.
	TaskStartTime *time.Time

	noSmithyDocumentSerde
}

// Describes a subnet.
type Subnet struct {

	// Indicates whether a network interface created in this subnet (including a
	// network interface created by RunInstances ) receives an IPv6 address.
	AssignIpv6AddressOnCreation *bool

	// The Availability Zone of the subnet.
	AvailabilityZone *string

	// The AZ ID of the subnet.
	AvailabilityZoneId *string

	// The number of unused private IPv4 addresses in the subnet. The IPv4 addresses
	// for any stopped instances are considered unavailable.
	AvailableIpAddressCount *int32

	// The IPv4 CIDR block assigned to the subnet.
	CidrBlock *string

	// The customer-owned IPv4 address pool associated with the subnet.
	CustomerOwnedIpv4Pool *string

	// Indicates whether this is the default subnet for the Availability Zone.
	DefaultForAz *bool

	// Indicates whether DNS queries made to the Amazon-provided DNS Resolver in this
	// subnet should return synthetic IPv6 addresses for IPv4-only destinations.
	EnableDns64 *bool

	// Indicates the device position for local network interfaces in this subnet. For
	// example, 1 indicates local network interfaces in this subnet are the secondary
	// network interface (eth1).
	EnableLniAtDeviceIndex *int32

	// Information about the IPv6 CIDR blocks associated with the subnet.
	Ipv6CidrBlockAssociationSet []SubnetIpv6CidrBlockAssociation

	// Indicates whether this is an IPv6 only subnet.
	Ipv6Native *bool

	// Indicates whether a network interface created in this subnet (including a
	// network interface created by RunInstances ) receives a customer-owned IPv4
	// address.
	MapCustomerOwnedIpOnLaunch *bool

	// Indicates whether instances launched in this subnet receive a public IPv4
	// address. Starting on February 1, 2024, Amazon Web Services will charge for all
	// public IPv4 addresses, including public IPv4 addresses associated with running
	// instances and Elastic IP addresses. For more information, see the Public IPv4
	// Address tab on the Amazon VPC pricing page (http://aws.amazon.com/vpc/pricing/) .
	MapPublicIpOnLaunch *bool

	// The Amazon Resource Name (ARN) of the Outpost.
	OutpostArn *string

	// The ID of the Amazon Web Services account that owns the subnet.
	OwnerId *string

	// The type of hostnames to assign to instances in the subnet at launch. An
	// instance hostname is based on the IPv4 address or ID of the instance.
	PrivateDnsNameOptionsOnLaunch *PrivateDnsNameOptionsOnLaunch

	// The current state of the subnet.
	State SubnetState

	// The Amazon Resource Name (ARN) of the subnet.
	SubnetArn *string

	// The ID of the subnet.
	SubnetId *string

	// Any tags assigned to the subnet.
	Tags []Tag

	// The ID of the VPC the subnet is in.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes the subnet association with the transit gateway multicast domain.
type SubnetAssociation struct {

	// The state of the subnet association.
	State TransitGatewayMulitcastDomainAssociationState

	// The ID of the subnet.
	SubnetId *string

	noSmithyDocumentSerde
}

// Describes the state of a CIDR block.
type SubnetCidrBlockState struct {

	// The state of a CIDR block.
	State SubnetCidrBlockStateCode

	// A message about the status of the CIDR block, if applicable.
	StatusMessage *string

	noSmithyDocumentSerde
}

// Describes a subnet CIDR reservation.
type SubnetCidrReservation struct {

	// The CIDR that has been reserved.
	Cidr *string

	// The description assigned to the subnet CIDR reservation.
	Description *string

	// The ID of the account that owns the subnet CIDR reservation.
	OwnerId *string

	// The type of reservation.
	ReservationType SubnetCidrReservationType

	// The ID of the subnet CIDR reservation.
	SubnetCidrReservationId *string

	// The ID of the subnet.
	SubnetId *string

	// The tags assigned to the subnet CIDR reservation.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes the configuration of a subnet for a VPC endpoint.
type SubnetConfiguration struct {

	// The IPv4 address to assign to the endpoint network interface in the subnet. You
	// must provide an IPv4 address if the VPC endpoint supports IPv4. If you specify
	// an IPv4 address when modifying a VPC endpoint, we replace the existing endpoint
	// network interface with a new endpoint network interface with this IP address.
	// This process temporarily disconnects the subnet and the VPC endpoint.
	Ipv4 *string

	// The IPv6 address to assign to the endpoint network interface in the subnet. You
	// must provide an IPv6 address if the VPC endpoint supports IPv6. If you specify
	// an IPv6 address when modifying a VPC endpoint, we replace the existing endpoint
	// network interface with a new endpoint network interface with this IP address.
	// This process temporarily disconnects the subnet and the VPC endpoint.
	Ipv6 *string

	// The ID of the subnet.
	SubnetId *string

	noSmithyDocumentSerde
}

// Describes an association between a subnet and an IPv6 CIDR block.
type SubnetIpv6CidrBlockAssociation struct {

	// The ID of the association.
	AssociationId *string

	// The IPv6 CIDR block.
	Ipv6CidrBlock *string

	// The state of the CIDR block.
	Ipv6CidrBlockState *SubnetCidrBlockState

	noSmithyDocumentSerde
}

// Describes an Infrastructure Performance subscription.
type Subscription struct {

	// The Region or Availability Zone that's the target for the subscription. For
	// example, eu-west-1 .
	Destination *string

	// The metric used for the subscription.
	Metric MetricType

	// The data aggregation time for the subscription.
	Period PeriodType

	// The Region or Availability Zone that's the source for the subscription. For
	// example, us-east-1 .
	Source *string

	// The statistic used for the subscription.
	Statistic StatisticType

	noSmithyDocumentSerde
}

// Describes the burstable performance instance whose credit option for CPU usage
// was successfully modified.
type SuccessfulInstanceCreditSpecificationItem struct {

	// The ID of the instance.
	InstanceId *string

	noSmithyDocumentSerde
}

// Describes a Reserved Instance whose queued purchase was successfully deleted.
type SuccessfulQueuedPurchaseDeletion struct {

	// The ID of the Reserved Instance.
	ReservedInstancesId *string

	noSmithyDocumentSerde
}

// Describes a tag.
type Tag struct {

	// The key of the tag. Constraints: Tag keys are case-sensitive and accept a
	// maximum of 127 Unicode characters. May not begin with aws: .
	Key *string

	// The value of the tag. Constraints: Tag values are case-sensitive and accept a
	// maximum of 256 Unicode characters.
	Value *string

	noSmithyDocumentSerde
}

// Describes a tag.
type TagDescription struct {

	// The tag key.
	Key *string

	// The ID of the resource.
	ResourceId *string

	// The resource type.
	ResourceType ResourceType

	// The tag value.
	Value *string

	noSmithyDocumentSerde
}

// The tags to apply to a resource when the resource is being created. When you
// specify a tag, you must specify the resource type to tag, otherwise the request
// will fail. The Valid Values lists all the resource types that can be tagged.
// However, the action you're using might not support tagging all of these resource
// types. If you try to tag a resource type that is unsupported for the action
// you're using, you'll get an error.
type TagSpecification struct {

	// The type of resource to tag on creation.
	ResourceType ResourceType

	// The tags to apply to the resource.
	Tags []Tag

	noSmithyDocumentSerde
}

// The number of units to request. You can choose to set the target capacity in
// terms of instances or a performance characteristic that is important to your
// application workload, such as vCPUs, memory, or I/O. If the request type is
// maintain , you can specify a target capacity of 0 and add capacity later. You
// can use the On-Demand Instance MaxTotalPrice parameter, the Spot Instance
// MaxTotalPrice , or both to ensure that your fleet cost does not exceed your
// budget. If you set a maximum price per hour for the On-Demand Instances and Spot
// Instances in your request, EC2 Fleet will launch instances until it reaches the
// maximum amount that you're willing to pay. When the maximum amount you're
// willing to pay is reached, the fleet stops launching instances even if it hasn’t
// met the target capacity. The MaxTotalPrice parameters are located in
// OnDemandOptions (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_OnDemandOptions.html)
// and SpotOptions (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotOptions)
// .
type TargetCapacitySpecification struct {

	// The default target capacity type.
	DefaultTargetCapacityType DefaultTargetCapacityType

	// The number of On-Demand units to request. If you specify a target capacity for
	// Spot units, you cannot specify a target capacity for On-Demand units.
	OnDemandTargetCapacity *int32

	// The maximum number of Spot units to launch. If you specify a target capacity
	// for On-Demand units, you cannot specify a target capacity for Spot units.
	SpotTargetCapacity *int32

	// The unit for the target capacity.
	TargetCapacityUnitType TargetCapacityUnitType

	// The number of units to request, filled the default target capacity type.
	TotalTargetCapacity *int32

	noSmithyDocumentSerde
}

// The number of units to request. You can choose to set the target capacity as
// the number of instances. Or you can set the target capacity to a performance
// characteristic that is important to your application workload, such as vCPUs,
// memory, or I/O. If the request type is maintain , you can specify a target
// capacity of 0 and add capacity later. You can use the On-Demand Instance
// MaxTotalPrice parameter, the Spot Instance MaxTotalPrice parameter, or both
// parameters to ensure that your fleet cost does not exceed your budget. If you
// set a maximum price per hour for the On-Demand Instances and Spot Instances in
// your request, EC2 Fleet will launch instances until it reaches the maximum
// amount that you're willing to pay. When the maximum amount you're willing to pay
// is reached, the fleet stops launching instances even if it hasn't met the target
// capacity. The MaxTotalPrice parameters are located in OnDemandOptionsRequest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_OnDemandOptionsRequest)
// and SpotOptionsRequest (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_SpotOptionsRequest)
// .
type TargetCapacitySpecificationRequest struct {

	// The number of units to request, filled using the default target capacity type.
	//
	// This member is required.
	TotalTargetCapacity *int32

	// The default target capacity type.
	DefaultTargetCapacityType DefaultTargetCapacityType

	// The number of On-Demand units to request.
	OnDemandTargetCapacity *int32

	// The number of Spot units to request.
	SpotTargetCapacity *int32

	// The unit for the target capacity. You can specify this parameter only when
	// using attributed-based instance type selection. Default: units (the number of
	// instances)
	TargetCapacityUnitType TargetCapacityUnitType

	noSmithyDocumentSerde
}

// Information about the Convertible Reserved Instance offering.
type TargetConfiguration struct {

	// The number of instances the Convertible Reserved Instance offering can be
	// applied to. This parameter is reserved and cannot be specified in a request
	InstanceCount *int32

	// The ID of the Convertible Reserved Instance offering.
	OfferingId *string

	noSmithyDocumentSerde
}

// Details about the target configuration.
type TargetConfigurationRequest struct {

	// The Convertible Reserved Instance offering ID.
	//
	// This member is required.
	OfferingId *string

	// The number of instances the Convertible Reserved Instance offering can be
	// applied to. This parameter is reserved and cannot be specified in a request
	InstanceCount *int32

	noSmithyDocumentSerde
}

// Describes a load balancer target group.
type TargetGroup struct {

	// The Amazon Resource Name (ARN) of the target group.
	Arn *string

	noSmithyDocumentSerde
}

// Describes the target groups to attach to a Spot Fleet. Spot Fleet registers the
// running Spot Instances with these target groups.
type TargetGroupsConfig struct {

	// One or more target groups.
	TargetGroups []TargetGroup

	noSmithyDocumentSerde
}

// Describes a target network associated with a Client VPN endpoint.
type TargetNetwork struct {

	// The ID of the association.
	AssociationId *string

	// The ID of the Client VPN endpoint with which the target network is associated.
	ClientVpnEndpointId *string

	// The IDs of the security groups applied to the target network association.
	SecurityGroups []string

	// The current state of the target network association.
	Status *AssociationStatus

	// The ID of the subnet specified as the target network.
	TargetNetworkId *string

	// The ID of the VPC in which the target network (subnet) is located.
	VpcId *string

	noSmithyDocumentSerde
}

// The total value of the new Convertible Reserved Instances.
type TargetReservationValue struct {

	// The total value of the Convertible Reserved Instances that make up the
	// exchange. This is the sum of the list value, remaining upfront price, and
	// additional upfront cost of the exchange.
	ReservationValue *ReservationValue

	// The configuration of the Convertible Reserved Instances that make up the
	// exchange.
	TargetConfiguration *TargetConfiguration

	noSmithyDocumentSerde
}

// Information about a terminated Client VPN endpoint client connection.
type TerminateConnectionStatus struct {

	// The ID of the client connection.
	ConnectionId *string

	// A message about the status of the client connection, if applicable.
	CurrentStatus *ClientVpnConnectionStatus

	// The state of the client connection.
	PreviousStatus *ClientVpnConnectionStatus

	noSmithyDocumentSerde
}

// Describes a through resource statement.
type ThroughResourcesStatement struct {

	// The resource statement.
	ResourceStatement *ResourceStatement

	noSmithyDocumentSerde
}

// Describes a through resource statement.
type ThroughResourcesStatementRequest struct {

	// The resource statement.
	ResourceStatement *ResourceStatementRequest

	noSmithyDocumentSerde
}

// The minimum and maximum amount of total local storage, in GB.
type TotalLocalStorageGB struct {

	// The maximum amount of total local storage, in GB. If this parameter is not
	// specified, there is no maximum limit.
	Max *float64

	// The minimum amount of total local storage, in GB. If this parameter is not
	// specified, there is no minimum limit.
	Min *float64

	noSmithyDocumentSerde
}

// The minimum and maximum amount of total local storage, in GB.
type TotalLocalStorageGBRequest struct {

	// The maximum amount of total local storage, in GB. To specify no maximum limit,
	// omit this parameter.
	Max *float64

	// The minimum amount of total local storage, in GB. To specify no minimum limit,
	// omit this parameter.
	Min *float64

	noSmithyDocumentSerde
}

// Describes the Traffic Mirror filter.
type TrafficMirrorFilter struct {

	// The description of the Traffic Mirror filter.
	Description *string

	// Information about the egress rules that are associated with the Traffic Mirror
	// filter.
	EgressFilterRules []TrafficMirrorFilterRule

	// Information about the ingress rules that are associated with the Traffic Mirror
	// filter.
	IngressFilterRules []TrafficMirrorFilterRule

	// The network service traffic that is associated with the Traffic Mirror filter.
	NetworkServices []TrafficMirrorNetworkService

	// The tags assigned to the Traffic Mirror filter.
	Tags []Tag

	// The ID of the Traffic Mirror filter.
	TrafficMirrorFilterId *string

	noSmithyDocumentSerde
}

// Describes the Traffic Mirror rule.
type TrafficMirrorFilterRule struct {

	// The description of the Traffic Mirror rule.
	Description *string

	// The destination CIDR block assigned to the Traffic Mirror rule.
	DestinationCidrBlock *string

	// The destination port range assigned to the Traffic Mirror rule.
	DestinationPortRange *TrafficMirrorPortRange

	// The protocol assigned to the Traffic Mirror rule.
	Protocol *int32

	// The action assigned to the Traffic Mirror rule.
	RuleAction TrafficMirrorRuleAction

	// The rule number of the Traffic Mirror rule.
	RuleNumber *int32

	// The source CIDR block assigned to the Traffic Mirror rule.
	SourceCidrBlock *string

	// The source port range assigned to the Traffic Mirror rule.
	SourcePortRange *TrafficMirrorPortRange

	// The traffic direction assigned to the Traffic Mirror rule.
	TrafficDirection TrafficDirection

	// The ID of the Traffic Mirror filter that the rule is associated with.
	TrafficMirrorFilterId *string

	// The ID of the Traffic Mirror rule.
	TrafficMirrorFilterRuleId *string

	noSmithyDocumentSerde
}

// Describes the Traffic Mirror port range.
type TrafficMirrorPortRange struct {

	// The start of the Traffic Mirror port range. This applies to the TCP and UDP
	// protocols.
	FromPort *int32

	// The end of the Traffic Mirror port range. This applies to the TCP and UDP
	// protocols.
	ToPort *int32

	noSmithyDocumentSerde
}

// Information about the Traffic Mirror filter rule port range.
type TrafficMirrorPortRangeRequest struct {

	// The first port in the Traffic Mirror port range. This applies to the TCP and
	// UDP protocols.
	FromPort *int32

	// The last port in the Traffic Mirror port range. This applies to the TCP and UDP
	// protocols.
	ToPort *int32

	noSmithyDocumentSerde
}

// Describes a Traffic Mirror session.
type TrafficMirrorSession struct {

	// The description of the Traffic Mirror session.
	Description *string

	// The ID of the Traffic Mirror session's network interface.
	NetworkInterfaceId *string

	// The ID of the account that owns the Traffic Mirror session.
	OwnerId *string

	// The number of bytes in each packet to mirror. These are the bytes after the
	// VXLAN header. To mirror a subset, set this to the length (in bytes) to mirror.
	// For example, if you set this value to 100, then the first 100 bytes that meet
	// the filter criteria are copied to the target. Do not specify this parameter when
	// you want to mirror the entire packet
	PacketLength *int32

	// The session number determines the order in which sessions are evaluated when an
	// interface is used by multiple sessions. The first session with a matching filter
	// is the one that mirrors the packets. Valid values are 1-32766.
	SessionNumber *int32

	// The tags assigned to the Traffic Mirror session.
	Tags []Tag

	// The ID of the Traffic Mirror filter.
	TrafficMirrorFilterId *string

	// The ID for the Traffic Mirror session.
	TrafficMirrorSessionId *string

	// The ID of the Traffic Mirror target.
	TrafficMirrorTargetId *string

	// The virtual network ID associated with the Traffic Mirror session.
	VirtualNetworkId *int32

	noSmithyDocumentSerde
}

// Describes a Traffic Mirror target.
type TrafficMirrorTarget struct {

	// Information about the Traffic Mirror target.
	Description *string

	// The ID of the Gateway Load Balancer endpoint.
	GatewayLoadBalancerEndpointId *string

	// The network interface ID that is attached to the target.
	NetworkInterfaceId *string

	// The Amazon Resource Name (ARN) of the Network Load Balancer.
	NetworkLoadBalancerArn *string

	// The ID of the account that owns the Traffic Mirror target.
	OwnerId *string

	// The tags assigned to the Traffic Mirror target.
	Tags []Tag

	// The ID of the Traffic Mirror target.
	TrafficMirrorTargetId *string

	// The type of Traffic Mirror target.
	Type TrafficMirrorTargetType

	noSmithyDocumentSerde
}

// Describes a transit gateway.
type TransitGateway struct {

	// The creation time.
	CreationTime *time.Time

	// The description of the transit gateway.
	Description *string

	// The transit gateway options.
	Options *TransitGatewayOptions

	// The ID of the Amazon Web Services account that owns the transit gateway.
	OwnerId *string

	// The state of the transit gateway.
	State TransitGatewayState

	// The tags for the transit gateway.
	Tags []Tag

	// The Amazon Resource Name (ARN) of the transit gateway.
	TransitGatewayArn *string

	// The ID of the transit gateway.
	TransitGatewayId *string

	noSmithyDocumentSerde
}

// Describes an association between a resource attachment and a transit gateway
// route table.
type TransitGatewayAssociation struct {

	// The ID of the resource.
	ResourceId *string

	// The resource type. Note that the tgw-peering resource type has been deprecated.
	ResourceType TransitGatewayAttachmentResourceType

	// The state of the association.
	State TransitGatewayAssociationState

	// The ID of the attachment.
	TransitGatewayAttachmentId *string

	// The ID of the transit gateway route table.
	TransitGatewayRouteTableId *string

	noSmithyDocumentSerde
}

// Describes an attachment between a resource and a transit gateway.
type TransitGatewayAttachment struct {

	// The association.
	Association *TransitGatewayAttachmentAssociation

	// The creation time.
	CreationTime *time.Time

	// The ID of the resource.
	ResourceId *string

	// The ID of the Amazon Web Services account that owns the resource.
	ResourceOwnerId *string

	// The resource type. Note that the tgw-peering resource type has been deprecated.
	ResourceType TransitGatewayAttachmentResourceType

	// The attachment state. Note that the initiating state has been deprecated.
	State TransitGatewayAttachmentState

	// The tags for the attachment.
	Tags []Tag

	// The ID of the attachment.
	TransitGatewayAttachmentId *string

	// The ID of the transit gateway.
	TransitGatewayId *string

	// The ID of the Amazon Web Services account that owns the transit gateway.
	TransitGatewayOwnerId *string

	noSmithyDocumentSerde
}

// Describes an association.
type TransitGatewayAttachmentAssociation struct {

	// The state of the association.
	State TransitGatewayAssociationState

	// The ID of the route table for the transit gateway.
	TransitGatewayRouteTableId *string

	noSmithyDocumentSerde
}

// The BGP configuration information.
type TransitGatewayAttachmentBgpConfiguration struct {

	// The BGP status.
	BgpStatus BgpStatus

	// The interior BGP peer IP address for the appliance.
	PeerAddress *string

	// The peer Autonomous System Number (ASN).
	PeerAsn *int64

	// The interior BGP peer IP address for the transit gateway.
	TransitGatewayAddress *string

	// The transit gateway Autonomous System Number (ASN).
	TransitGatewayAsn *int64

	noSmithyDocumentSerde
}

// Describes a propagation route table.
type TransitGatewayAttachmentPropagation struct {

	// The state of the propagation route table.
	State TransitGatewayPropagationState

	// The ID of the propagation route table.
	TransitGatewayRouteTableId *string

	noSmithyDocumentSerde
}

// Describes a transit gateway Connect attachment.
type TransitGatewayConnect struct {

	// The creation time.
	CreationTime *time.Time

	// The Connect attachment options.
	Options *TransitGatewayConnectOptions

	// The state of the attachment.
	State TransitGatewayAttachmentState

	// The tags for the attachment.
	Tags []Tag

	// The ID of the Connect attachment.
	TransitGatewayAttachmentId *string

	// The ID of the transit gateway.
	TransitGatewayId *string

	// The ID of the attachment from which the Connect attachment was created.
	TransportTransitGatewayAttachmentId *string

	noSmithyDocumentSerde
}

// Describes the Connect attachment options.
type TransitGatewayConnectOptions struct {

	// The tunnel protocol.
	Protocol ProtocolValue

	noSmithyDocumentSerde
}

// Describes a transit gateway Connect peer.
type TransitGatewayConnectPeer struct {

	// The Connect peer details.
	ConnectPeerConfiguration *TransitGatewayConnectPeerConfiguration

	// The creation time.
	CreationTime *time.Time

	// The state of the Connect peer.
	State TransitGatewayConnectPeerState

	// The tags for the Connect peer.
	Tags []Tag

	// The ID of the Connect attachment.
	TransitGatewayAttachmentId *string

	// The ID of the Connect peer.
	TransitGatewayConnectPeerId *string

	noSmithyDocumentSerde
}

// Describes the Connect peer details.
type TransitGatewayConnectPeerConfiguration struct {

	// The BGP configuration details.
	BgpConfigurations []TransitGatewayAttachmentBgpConfiguration

	// The range of interior BGP peer IP addresses.
	InsideCidrBlocks []string

	// The Connect peer IP address on the appliance side of the tunnel.
	PeerAddress *string

	// The tunnel protocol.
	Protocol ProtocolValue

	// The Connect peer IP address on the transit gateway side of the tunnel.
	TransitGatewayAddress *string

	noSmithyDocumentSerde
}

// The BGP options for the Connect attachment.
type TransitGatewayConnectRequestBgpOptions struct {

	// The peer Autonomous System Number (ASN).
	PeerAsn *int64

	noSmithyDocumentSerde
}

// Describes the deregistered transit gateway multicast group members.
type TransitGatewayMulticastDeregisteredGroupMembers struct {

	// The network interface IDs of the deregistered members.
	DeregisteredNetworkInterfaceIds []string

	// The IP address assigned to the transit gateway multicast group.
	GroupIpAddress *string

	// The ID of the transit gateway multicast domain.
	TransitGatewayMulticastDomainId *string

	noSmithyDocumentSerde
}

// Describes the deregistered transit gateway multicast group sources.
type TransitGatewayMulticastDeregisteredGroupSources struct {

	// The network interface IDs of the non-registered members.
	DeregisteredNetworkInterfaceIds []string

	// The IP address assigned to the transit gateway multicast group.
	GroupIpAddress *string

	// The ID of the transit gateway multicast domain.
	TransitGatewayMulticastDomainId *string

	noSmithyDocumentSerde
}

// Describes the transit gateway multicast domain.
type TransitGatewayMulticastDomain struct {

	// The time the transit gateway multicast domain was created.
	CreationTime *time.Time

	// The options for the transit gateway multicast domain.
	Options *TransitGatewayMulticastDomainOptions

	// The ID of the Amazon Web Services account that owns the transit gateway
	// multicast domain.
	OwnerId *string

	// The state of the transit gateway multicast domain.
	State TransitGatewayMulticastDomainState

	// The tags for the transit gateway multicast domain.
	Tags []Tag

	// The ID of the transit gateway.
	TransitGatewayId *string

	// The Amazon Resource Name (ARN) of the transit gateway multicast domain.
	TransitGatewayMulticastDomainArn *string

	// The ID of the transit gateway multicast domain.
	TransitGatewayMulticastDomainId *string

	noSmithyDocumentSerde
}

// Describes the resources associated with the transit gateway multicast domain.
type TransitGatewayMulticastDomainAssociation struct {

	// The ID of the resource.
	ResourceId *string

	// The ID of the Amazon Web Services account that owns the transit gateway
	// multicast domain association resource.
	ResourceOwnerId *string

	// The type of resource, for example a VPC attachment.
	ResourceType TransitGatewayAttachmentResourceType

	// The subnet associated with the transit gateway multicast domain.
	Subnet *SubnetAssociation

	// The ID of the transit gateway attachment.
	TransitGatewayAttachmentId *string

	noSmithyDocumentSerde
}

// Describes the multicast domain associations.
type TransitGatewayMulticastDomainAssociations struct {

	// The ID of the resource.
	ResourceId *string

	// The ID of the Amazon Web Services account that owns the resource.
	ResourceOwnerId *string

	// The type of resource, for example a VPC attachment.
	ResourceType TransitGatewayAttachmentResourceType

	// The subnets associated with the multicast domain.
	Subnets []SubnetAssociation

	// The ID of the transit gateway attachment.
	TransitGatewayAttachmentId *string

	// The ID of the transit gateway multicast domain.
	TransitGatewayMulticastDomainId *string

	noSmithyDocumentSerde
}

// Describes the options for a transit gateway multicast domain.
type TransitGatewayMulticastDomainOptions struct {

	// Indicates whether to automatically cross-account subnet associations that are
	// associated with the transit gateway multicast domain.
	AutoAcceptSharedAssociations AutoAcceptSharedAssociationsValue

	// Indicates whether Internet Group Management Protocol (IGMP) version 2 is turned
	// on for the transit gateway multicast domain.
	Igmpv2Support Igmpv2SupportValue

	// Indicates whether support for statically configuring transit gateway multicast
	// group sources is turned on.
	StaticSourcesSupport StaticSourcesSupportValue

	noSmithyDocumentSerde
}

// Describes the transit gateway multicast group resources.
type TransitGatewayMulticastGroup struct {

	// The IP address assigned to the transit gateway multicast group.
	GroupIpAddress *string

	// Indicates that the resource is a transit gateway multicast group member.
	GroupMember *bool

	// Indicates that the resource is a transit gateway multicast group member.
	GroupSource *bool

	// The member type (for example, static ).
	MemberType MembershipType

	// The ID of the transit gateway attachment.
	NetworkInterfaceId *string

	// The ID of the resource.
	ResourceId *string

	// The ID of the Amazon Web Services account that owns the transit gateway
	// multicast domain group resource.
	ResourceOwnerId *string

	// The type of resource, for example a VPC attachment.
	ResourceType TransitGatewayAttachmentResourceType

	// The source type.
	SourceType MembershipType

	// The ID of the subnet.
	SubnetId *string

	// The ID of the transit gateway attachment.
	TransitGatewayAttachmentId *string

	noSmithyDocumentSerde
}

// Describes the registered transit gateway multicast group members.
type TransitGatewayMulticastRegisteredGroupMembers struct {

	// The IP address assigned to the transit gateway multicast group.
	GroupIpAddress *string

	// The ID of the registered network interfaces.
	RegisteredNetworkInterfaceIds []string

	// The ID of the transit gateway multicast domain.
	TransitGatewayMulticastDomainId *string

	noSmithyDocumentSerde
}

// Describes the members registered with the transit gateway multicast group.
type TransitGatewayMulticastRegisteredGroupSources struct {

	// The IP address assigned to the transit gateway multicast group.
	GroupIpAddress *string

	// The IDs of the network interfaces members registered with the transit gateway
	// multicast group.
	RegisteredNetworkInterfaceIds []string

	// The ID of the transit gateway multicast domain.
	TransitGatewayMulticastDomainId *string

	noSmithyDocumentSerde
}

// Describes the options for a transit gateway.
type TransitGatewayOptions struct {

	// A private Autonomous System Number (ASN) for the Amazon side of a BGP session.
	// The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 4294967294 for
	// 32-bit ASNs.
	AmazonSideAsn *int64

	// The ID of the default association route table.
	AssociationDefaultRouteTableId *string

	// Indicates whether attachment requests are automatically accepted.
	AutoAcceptSharedAttachments AutoAcceptSharedAttachmentsValue

	// Indicates whether resource attachments are automatically associated with the
	// default association route table.
	DefaultRouteTableAssociation DefaultRouteTableAssociationValue

	// Indicates whether resource attachments automatically propagate routes to the
	// default propagation route table.
	DefaultRouteTablePropagation DefaultRouteTablePropagationValue

	// Indicates whether DNS support is enabled.
	DnsSupport DnsSupportValue

	// Indicates whether multicast is enabled on the transit gateway
	MulticastSupport MulticastSupportValue

	// The ID of the default propagation route table.
	PropagationDefaultRouteTableId *string

	// Enables you to reference a security group across VPCs attached to a transit
	// gateway (TGW). Use this option to simplify security group management and control
	// of instance-to-instance traffic across VPCs that are connected by transit
	// gateway. You can also use this option to migrate from VPC peering (which was the
	// only option that supported security group referencing) to transit gateways
	// (which now also support security group referencing). This option is disabled by
	// default and there are no additional costs to use this feature. For important
	// information about this feature, see Create a transit gateway (https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#create-tgw)
	// in the Amazon Web Services Transit Gateway Guide.
	SecurityGroupReferencingSupport SecurityGroupReferencingSupportValue

	// The transit gateway CIDR blocks.
	TransitGatewayCidrBlocks []string

	// Indicates whether Equal Cost Multipath Protocol support is enabled.
	VpnEcmpSupport VpnEcmpSupportValue

	noSmithyDocumentSerde
}

// Describes the transit gateway peering attachment.
type TransitGatewayPeeringAttachment struct {

	// Information about the accepter transit gateway.
	AccepterTgwInfo *PeeringTgwInfo

	// The ID of the accepter transit gateway attachment.
	AccepterTransitGatewayAttachmentId *string

	// The time the transit gateway peering attachment was created.
	CreationTime *time.Time

	// Details about the transit gateway peering attachment.
	Options *TransitGatewayPeeringAttachmentOptions

	// Information about the requester transit gateway.
	RequesterTgwInfo *PeeringTgwInfo

	// The state of the transit gateway peering attachment. Note that the initiating
	// state has been deprecated.
	State TransitGatewayAttachmentState

	// The status of the transit gateway peering attachment.
	Status *PeeringAttachmentStatus

	// The tags for the transit gateway peering attachment.
	Tags []Tag

	// The ID of the transit gateway peering attachment.
	TransitGatewayAttachmentId *string

	noSmithyDocumentSerde
}

// Describes dynamic routing for the transit gateway peering attachment.
type TransitGatewayPeeringAttachmentOptions struct {

	// Describes whether dynamic routing is enabled or disabled for the transit
	// gateway peering attachment.
	DynamicRouting DynamicRoutingValue

	noSmithyDocumentSerde
}

// Describes a rule associated with a transit gateway policy.
type TransitGatewayPolicyRule struct {

	// The destination CIDR block for the transit gateway policy rule.
	DestinationCidrBlock *string

	// The port range for the transit gateway policy rule. Currently this is set to *
	// (all).
	DestinationPortRange *string

	// The meta data tags used for the transit gateway policy rule.
	MetaData *TransitGatewayPolicyRuleMetaData

	// The protocol used by the transit gateway policy rule.
	Protocol *string

	// The source CIDR block for the transit gateway policy rule.
	SourceCidrBlock *string

	// The port range for the transit gateway policy rule. Currently this is set to *
	// (all).
	SourcePortRange *string

	noSmithyDocumentSerde
}

// Describes the meta data tags associated with a transit gateway policy rule.
type TransitGatewayPolicyRuleMetaData struct {

	// The key name for the transit gateway policy rule meta data tag.
	MetaDataKey *string

	// The value of the key for the transit gateway policy rule meta data tag.
	MetaDataValue *string

	noSmithyDocumentSerde
}

// Describes a transit gateway policy table.
type TransitGatewayPolicyTable struct {

	// The timestamp when the transit gateway policy table was created.
	CreationTime *time.Time

	// The state of the transit gateway policy table
	State TransitGatewayPolicyTableState

	// he key-value pairs associated with the transit gateway policy table.
	Tags []Tag

	// The ID of the transit gateway.
	TransitGatewayId *string

	// The ID of the transit gateway policy table.
	TransitGatewayPolicyTableId *string

	noSmithyDocumentSerde
}

// Describes a transit gateway policy table association.
type TransitGatewayPolicyTableAssociation struct {

	// The resource ID of the transit gateway attachment.
	ResourceId *string

	// The resource type for the transit gateway policy table association.
	ResourceType TransitGatewayAttachmentResourceType

	// The state of the transit gateway policy table association.
	State TransitGatewayAssociationState

	// The ID of the transit gateway attachment.
	TransitGatewayAttachmentId *string

	// The ID of the transit gateway policy table.
	TransitGatewayPolicyTableId *string

	noSmithyDocumentSerde
}

// Describes a transit gateway policy table entry
type TransitGatewayPolicyTableEntry struct {

	// The policy rule associated with the transit gateway policy table.
	PolicyRule *TransitGatewayPolicyRule

	// The rule number for the transit gateway policy table entry.
	PolicyRuleNumber *string

	// The ID of the target route table.
	TargetRouteTableId *string

	noSmithyDocumentSerde
}

// Describes a transit gateway prefix list attachment.
type TransitGatewayPrefixListAttachment struct {

	// The ID of the resource.
	ResourceId *string

	// The resource type. Note that the tgw-peering resource type has been deprecated.
	ResourceType TransitGatewayAttachmentResourceType

	// The ID of the attachment.
	TransitGatewayAttachmentId *string

	noSmithyDocumentSerde
}

// Describes a prefix list reference.
type TransitGatewayPrefixListReference struct {

	// Indicates whether traffic that matches this route is dropped.
	Blackhole *bool

	// The ID of the prefix list.
	PrefixListId *string

	// The ID of the prefix list owner.
	PrefixListOwnerId *string

	// The state of the prefix list reference.
	State TransitGatewayPrefixListReferenceState

	// Information about the transit gateway attachment.
	TransitGatewayAttachment *TransitGatewayPrefixListAttachment

	// The ID of the transit gateway route table.
	TransitGatewayRouteTableId *string

	noSmithyDocumentSerde
}

// Describes route propagation.
type TransitGatewayPropagation struct {

	// The ID of the resource.
	ResourceId *string

	// The resource type. Note that the tgw-peering resource type has been deprecated.
	ResourceType TransitGatewayAttachmentResourceType

	// The state.
	State TransitGatewayPropagationState

	// The ID of the attachment.
	TransitGatewayAttachmentId *string

	// The ID of the transit gateway route table announcement.
	TransitGatewayRouteTableAnnouncementId *string

	// The ID of the transit gateway route table.
	TransitGatewayRouteTableId *string

	noSmithyDocumentSerde
}

// Describes the options for a transit gateway.
type TransitGatewayRequestOptions struct {

	// A private Autonomous System Number (ASN) for the Amazon side of a BGP session.
	// The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 4294967294 for
	// 32-bit ASNs. The default is 64512 .
	AmazonSideAsn *int64

	// Enable or disable automatic acceptance of attachment requests. Disabled by
	// default.
	AutoAcceptSharedAttachments AutoAcceptSharedAttachmentsValue

	// Enable or disable automatic association with the default association route
	// table. Enabled by default.
	DefaultRouteTableAssociation DefaultRouteTableAssociationValue

	// Enable or disable automatic propagation of routes to the default propagation
	// route table. Enabled by default.
	DefaultRouteTablePropagation DefaultRouteTablePropagationValue

	// Enable or disable DNS support. Enabled by default.
	DnsSupport DnsSupportValue

	// Indicates whether multicast is enabled on the transit gateway
	MulticastSupport MulticastSupportValue

	// Enables you to reference a security group across VPCs attached to a transit
	// gateway (TGW). Use this option to simplify security group management and control
	// of instance-to-instance traffic across VPCs that are connected by transit
	// gateway. You can also use this option to migrate from VPC peering (which was the
	// only option that supported security group referencing) to transit gateways
	// (which now also support security group referencing). This option is disabled by
	// default and there are no additional costs to use this feature. For important
	// information about this feature, see Create a transit gateway (https://docs.aws.amazon.com/vpc/latest/tgw/tgw-transit-gateways.html#create-tgw)
	// in the Amazon Web Services Transit Gateway Guide.
	SecurityGroupReferencingSupport SecurityGroupReferencingSupportValue

	// One or more IPv4 or IPv6 CIDR blocks for the transit gateway. Must be a size
	// /24 CIDR block or larger for IPv4, or a size /64 CIDR block or larger for IPv6.
	TransitGatewayCidrBlocks []string

	// Enable or disable Equal Cost Multipath Protocol support. Enabled by default.
	VpnEcmpSupport VpnEcmpSupportValue

	noSmithyDocumentSerde
}

// Describes a route for a transit gateway route table.
type TransitGatewayRoute struct {

	// The CIDR block used for destination matches.
	DestinationCidrBlock *string

	// The ID of the prefix list used for destination matches.
	PrefixListId *string

	// The state of the route.
	State TransitGatewayRouteState

	// The attachments.
	TransitGatewayAttachments []TransitGatewayRouteAttachment

	// The ID of the transit gateway route table announcement.
	TransitGatewayRouteTableAnnouncementId *string

	// The route type.
	Type TransitGatewayRouteType

	noSmithyDocumentSerde
}

// Describes a route attachment.
type TransitGatewayRouteAttachment struct {

	// The ID of the resource.
	ResourceId *string

	// The resource type. Note that the tgw-peering resource type has been deprecated.
	ResourceType TransitGatewayAttachmentResourceType

	// The ID of the attachment.
	TransitGatewayAttachmentId *string

	noSmithyDocumentSerde
}

// Describes a transit gateway route table.
type TransitGatewayRouteTable struct {

	// The creation time.
	CreationTime *time.Time

	// Indicates whether this is the default association route table for the transit
	// gateway.
	DefaultAssociationRouteTable *bool

	// Indicates whether this is the default propagation route table for the transit
	// gateway.
	DefaultPropagationRouteTable *bool

	// The state of the transit gateway route table.
	State TransitGatewayRouteTableState

	// Any tags assigned to the route table.
	Tags []Tag

	// The ID of the transit gateway.
	TransitGatewayId *string

	// The ID of the transit gateway route table.
	TransitGatewayRouteTableId *string

	noSmithyDocumentSerde
}

// Describes a transit gateway route table announcement.
type TransitGatewayRouteTableAnnouncement struct {

	// The direction for the route table announcement.
	AnnouncementDirection TransitGatewayRouteTableAnnouncementDirection

	// The ID of the core network for the transit gateway route table announcement.
	CoreNetworkId *string

	// The timestamp when the transit gateway route table announcement was created.
	CreationTime *time.Time

	// The ID of the core network ID for the peer.
	PeerCoreNetworkId *string

	// The ID of the peer transit gateway.
	PeerTransitGatewayId *string

	// The ID of the peering attachment.
	PeeringAttachmentId *string

	// The state of the transit gateway announcement.
	State TransitGatewayRouteTableAnnouncementState

	// The key-value pairs associated with the route table announcement.
	Tags []Tag

	// The ID of the transit gateway.
	TransitGatewayId *string

	// The ID of the transit gateway route table announcement.
	TransitGatewayRouteTableAnnouncementId *string

	// The ID of the transit gateway route table.
	TransitGatewayRouteTableId *string

	noSmithyDocumentSerde
}

// Describes an association between a route table and a resource attachment.
type TransitGatewayRouteTableAssociation struct {

	// The ID of the resource.
	ResourceId *string

	// The resource type. Note that the tgw-peering resource type has been deprecated.
	ResourceType TransitGatewayAttachmentResourceType

	// The state of the association.
	State TransitGatewayAssociationState

	// The ID of the attachment.
	TransitGatewayAttachmentId *string

	noSmithyDocumentSerde
}

// Describes a route table propagation.
type TransitGatewayRouteTablePropagation struct {

	// The ID of the resource.
	ResourceId *string

	// The type of resource. Note that the tgw-peering resource type has been
	// deprecated.
	ResourceType TransitGatewayAttachmentResourceType

	// The state of the resource.
	State TransitGatewayPropagationState

	// The ID of the attachment.
	TransitGatewayAttachmentId *string

	// The ID of the transit gateway route table announcement.
	TransitGatewayRouteTableAnnouncementId *string

	noSmithyDocumentSerde
}

// Describes a route in a transit gateway route table.
type TransitGatewayRouteTableRoute struct {

	// The ID of the route attachment.
	AttachmentId *string

	// The CIDR block used for destination matches.
	DestinationCidr *string

	// The ID of the prefix list.
	PrefixListId *string

	// The ID of the resource for the route attachment.
	ResourceId *string

	// The resource type for the route attachment.
	ResourceType *string

	// The route origin. The following are the possible values:
	//   - static
	//   - propagated
	RouteOrigin *string

	// The state of the route.
	State *string

	noSmithyDocumentSerde
}

// Describes a VPC attachment.
type TransitGatewayVpcAttachment struct {

	// The creation time.
	CreationTime *time.Time

	// The VPC attachment options.
	Options *TransitGatewayVpcAttachmentOptions

	// The state of the VPC attachment. Note that the initiating state has been
	// deprecated.
	State TransitGatewayAttachmentState

	// The IDs of the subnets.
	SubnetIds []string

	// The tags for the VPC attachment.
	Tags []Tag

	// The ID of the attachment.
	TransitGatewayAttachmentId *string

	// The ID of the transit gateway.
	TransitGatewayId *string

	// The ID of the VPC.
	VpcId *string

	// The ID of the Amazon Web Services account that owns the VPC.
	VpcOwnerId *string

	noSmithyDocumentSerde
}

// Describes the VPC attachment options.
type TransitGatewayVpcAttachmentOptions struct {

	// Indicates whether appliance mode support is enabled.
	ApplianceModeSupport ApplianceModeSupportValue

	// Indicates whether DNS support is enabled.
	DnsSupport DnsSupportValue

	// Indicates whether IPv6 support is disabled.
	Ipv6Support Ipv6SupportValue

	// For important information about this feature, see Create a transit gateway
	// attachment to a VPC (https://docs.aws.amazon.com/vpc/latest/tgw/tgw-vpc-attachments.html#create-vpc-attachment)
	// in the Amazon Web Services Transit Gateway Guide.
	SecurityGroupReferencingSupport SecurityGroupReferencingSupportValue

	noSmithyDocumentSerde
}

// Information about an association between a branch network interface with a
// trunk network interface.
type TrunkInterfaceAssociation struct {

	// The ID of the association.
	AssociationId *string

	// The ID of the branch network interface.
	BranchInterfaceId *string

	// The application key when you use the GRE protocol.
	GreKey *int32

	// The interface protocol. Valid values are VLAN and GRE .
	InterfaceProtocol InterfaceProtocolType

	// The tags for the trunk interface association.
	Tags []Tag

	// The ID of the trunk network interface.
	TrunkInterfaceId *string

	// The ID of the VLAN when you use the VLAN protocol.
	VlanId *int32

	noSmithyDocumentSerde
}

// The VPN tunnel options.
type TunnelOption struct {

	// The action to take after a DPD timeout occurs.
	DpdTimeoutAction *string

	// The number of seconds after which a DPD timeout occurs.
	DpdTimeoutSeconds *int32

	// Status of tunnel endpoint lifecycle control feature.
	EnableTunnelLifecycleControl *bool

	// The IKE versions that are permitted for the VPN tunnel.
	IkeVersions []IKEVersionsListValue

	// Options for logging VPN tunnel activity.
	LogOptions *VpnTunnelLogOptions

	// The external IP address of the VPN tunnel.
	OutsideIpAddress *string

	// The permitted Diffie-Hellman group numbers for the VPN tunnel for phase 1 IKE
	// negotiations.
	Phase1DHGroupNumbers []Phase1DHGroupNumbersListValue

	// The permitted encryption algorithms for the VPN tunnel for phase 1 IKE
	// negotiations.
	Phase1EncryptionAlgorithms []Phase1EncryptionAlgorithmsListValue

	// The permitted integrity algorithms for the VPN tunnel for phase 1 IKE
	// negotiations.
	Phase1IntegrityAlgorithms []Phase1IntegrityAlgorithmsListValue

	// The lifetime for phase 1 of the IKE negotiation, in seconds.
	Phase1LifetimeSeconds *int32

	// The permitted Diffie-Hellman group numbers for the VPN tunnel for phase 2 IKE
	// negotiations.
	Phase2DHGroupNumbers []Phase2DHGroupNumbersListValue

	// The permitted encryption algorithms for the VPN tunnel for phase 2 IKE
	// negotiations.
	Phase2EncryptionAlgorithms []Phase2EncryptionAlgorithmsListValue

	// The permitted integrity algorithms for the VPN tunnel for phase 2 IKE
	// negotiations.
	Phase2IntegrityAlgorithms []Phase2IntegrityAlgorithmsListValue

	// The lifetime for phase 2 of the IKE negotiation, in seconds.
	Phase2LifetimeSeconds *int32

	// The pre-shared key (PSK) to establish initial authentication between the
	// virtual private gateway and the customer gateway.
	PreSharedKey *string

	// The percentage of the rekey window determined by RekeyMarginTimeSeconds during
	// which the rekey time is randomly selected.
	RekeyFuzzPercentage *int32

	// The margin time, in seconds, before the phase 2 lifetime expires, during which
	// the Amazon Web Services side of the VPN connection performs an IKE rekey.
	RekeyMarginTimeSeconds *int32

	// The number of packets in an IKE replay window.
	ReplayWindowSize *int32

	// The action to take when the establishing the VPN tunnels for a VPN connection.
	StartupAction *string

	// The range of inside IPv4 addresses for the tunnel.
	TunnelInsideCidr *string

	// The range of inside IPv6 addresses for the tunnel.
	TunnelInsideIpv6Cidr *string

	noSmithyDocumentSerde
}

// Describes the burstable performance instance whose credit option for CPU usage
// was not modified.
type UnsuccessfulInstanceCreditSpecificationItem struct {

	// The applicable error for the burstable performance instance whose credit option
	// for CPU usage was not modified.
	Error *UnsuccessfulInstanceCreditSpecificationItemError

	// The ID of the instance.
	InstanceId *string

	noSmithyDocumentSerde
}

// Information about the error for the burstable performance instance whose credit
// option for CPU usage was not modified.
type UnsuccessfulInstanceCreditSpecificationItemError struct {

	// The error code.
	Code UnsuccessfulInstanceCreditSpecificationErrorCode

	// The applicable error message.
	Message *string

	noSmithyDocumentSerde
}

// Information about items that were not successfully processed in a batch call.
type UnsuccessfulItem struct {

	// Information about the error.
	Error *UnsuccessfulItemError

	// The ID of the resource.
	ResourceId *string

	noSmithyDocumentSerde
}

// Information about the error that occurred. For more information about errors,
// see Error codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)
// .
type UnsuccessfulItemError struct {

	// The error code.
	Code *string

	// The error message accompanying the error code.
	Message *string

	noSmithyDocumentSerde
}

// Describes the Amazon S3 bucket for the disk image.
type UserBucket struct {

	// The name of the Amazon S3 bucket where the disk image is located.
	S3Bucket *string

	// The file name of the disk image.
	S3Key *string

	noSmithyDocumentSerde
}

// Describes the Amazon S3 bucket for the disk image.
type UserBucketDetails struct {

	// The Amazon S3 bucket from which the disk image was created.
	S3Bucket *string

	// The file name of the disk image.
	S3Key *string

	noSmithyDocumentSerde
}

// Describes the user data for an instance.
type UserData struct {

	// The user data. If you are using an Amazon Web Services SDK or command line
	// tool, Base64-encoding is performed for you, and you can load the text from a
	// file. Otherwise, you must provide Base64-encoded text.
	Data *string

	noSmithyDocumentSerde
}

// Describes a security group and Amazon Web Services account ID pair.
type UserIdGroupPair struct {

	// A description for the security group rule that references this user ID group
	// pair. Constraints: Up to 255 characters in length. Allowed characters are a-z,
	// A-Z, 0-9, spaces, and ._-:/()#,@[]+=;{}!$*
	Description *string

	// The ID of the security group.
	GroupId *string

	// [Default VPC] The name of the security group. For a security group in a
	// nondefault VPC, use the security group ID. For a referenced security group in
	// another VPC, this value is not returned if the referenced security group is
	// deleted.
	GroupName *string

	// The status of a VPC peering connection, if applicable.
	PeeringStatus *string

	// The ID of an Amazon Web Services account. For a referenced security group in
	// another VPC, the account ID of the referenced security group is returned in the
	// response. If the referenced security group is deleted, this value is not
	// returned.
	UserId *string

	// The ID of the VPC for the referenced security group, if applicable.
	VpcId *string

	// The ID of the VPC peering connection, if applicable.
	VpcPeeringConnectionId *string

	noSmithyDocumentSerde
}

// The error code and error message that is returned for a parameter or parameter
// combination that is not valid when a new launch template or new version of a
// launch template is created.
type ValidationError struct {

	// The error code that indicates why the parameter or parameter combination is not
	// valid. For more information about error codes, see Error codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)
	// .
	Code *string

	// The error message that describes why the parameter or parameter combination is
	// not valid. For more information about error messages, see Error codes (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)
	// .
	Message *string

	noSmithyDocumentSerde
}

// The error codes and error messages that are returned for the parameters or
// parameter combinations that are not valid when a new launch template or new
// version of a launch template is created.
type ValidationWarning struct {

	// The error codes and error messages.
	Errors []ValidationError

	noSmithyDocumentSerde
}

// The minimum and maximum number of vCPUs.
type VCpuCountRange struct {

	// The maximum number of vCPUs. If this parameter is not specified, there is no
	// maximum limit.
	Max *int32

	// The minimum number of vCPUs. If the value is 0 , there is no minimum limit.
	Min *int32

	noSmithyDocumentSerde
}

// The minimum and maximum number of vCPUs.
type VCpuCountRangeRequest struct {

	// The minimum number of vCPUs. To specify no minimum limit, specify 0 .
	//
	// This member is required.
	Min *int32

	// The maximum number of vCPUs. To specify no maximum limit, omit this parameter.
	Max *int32

	noSmithyDocumentSerde
}

// Describes the vCPU configurations for the instance type.
type VCpuInfo struct {

	// The default number of cores for the instance type.
	DefaultCores *int32

	// The default number of threads per core for the instance type.
	DefaultThreadsPerCore *int32

	// The default number of vCPUs for the instance type.
	DefaultVCpus *int32

	// The valid number of cores that can be configured for the instance type.
	ValidCores []int32

	// The valid number of threads per core that can be configured for the instance
	// type.
	ValidThreadsPerCore []int32

	noSmithyDocumentSerde
}

// An Amazon Web Services Verified Access endpoint specifies the application that
// Amazon Web Services Verified Access provides access to. It must be attached to
// an Amazon Web Services Verified Access group. An Amazon Web Services Verified
// Access endpoint must also have an attached access policy before you attached it
// to a group.
type VerifiedAccessEndpoint struct {

	// The DNS name for users to reach your application.
	ApplicationDomain *string

	// The type of attachment used to provide connectivity between the Amazon Web
	// Services Verified Access endpoint and the application.
	AttachmentType VerifiedAccessEndpointAttachmentType

	// The creation time.
	CreationTime *string

	// The deletion time.
	DeletionTime *string

	// A description for the Amazon Web Services Verified Access endpoint.
	Description *string

	// Returned if endpoint has a device trust provider attached.
	DeviceValidationDomain *string

	// The ARN of a public TLS/SSL certificate imported into or created with ACM.
	DomainCertificateArn *string

	// A DNS name that is generated for the endpoint.
	EndpointDomain *string

	// The type of Amazon Web Services Verified Access endpoint. Incoming application
	// requests will be sent to an IP address, load balancer or a network interface
	// depending on the endpoint type specified.
	EndpointType VerifiedAccessEndpointType

	// The last updated time.
	LastUpdatedTime *string

	// The load balancer details if creating the Amazon Web Services Verified Access
	// endpoint as load-balancer type.
	LoadBalancerOptions *VerifiedAccessEndpointLoadBalancerOptions

	// The options for network-interface type endpoint.
	NetworkInterfaceOptions *VerifiedAccessEndpointEniOptions

	// The IDs of the security groups for the endpoint.
	SecurityGroupIds []string

	// The options in use for server side encryption.
	SseSpecification *VerifiedAccessSseSpecificationResponse

	// The endpoint status.
	Status *VerifiedAccessEndpointStatus

	// The tags.
	Tags []Tag

	// The ID of the Amazon Web Services Verified Access endpoint.
	VerifiedAccessEndpointId *string

	// The ID of the Amazon Web Services Verified Access group.
	VerifiedAccessGroupId *string

	// The ID of the Amazon Web Services Verified Access instance.
	VerifiedAccessInstanceId *string

	noSmithyDocumentSerde
}

// Options for a network-interface type endpoint.
type VerifiedAccessEndpointEniOptions struct {

	// The ID of the network interface.
	NetworkInterfaceId *string

	// The IP port number.
	Port *int32

	// The IP protocol.
	Protocol VerifiedAccessEndpointProtocol

	noSmithyDocumentSerde
}

// Describes a load balancer when creating an Amazon Web Services Verified Access
// endpoint using the load-balancer type.
type VerifiedAccessEndpointLoadBalancerOptions struct {

	// The ARN of the load balancer.
	LoadBalancerArn *string

	// The IP port number.
	Port *int32

	// The IP protocol.
	Protocol VerifiedAccessEndpointProtocol

	// The IDs of the subnets.
	SubnetIds []string

	noSmithyDocumentSerde
}

// Describes the status of a Verified Access endpoint.
type VerifiedAccessEndpointStatus struct {

	// The status code of the Verified Access endpoint.
	Code VerifiedAccessEndpointStatusCode

	// The status message of the Verified Access endpoint.
	Message *string

	noSmithyDocumentSerde
}

// Describes a Verified Access group.
type VerifiedAccessGroup struct {

	// The creation time.
	CreationTime *string

	// The deletion time.
	DeletionTime *string

	// A description for the Amazon Web Services Verified Access group.
	Description *string

	// The last updated time.
	LastUpdatedTime *string

	// The Amazon Web Services account number that owns the group.
	Owner *string

	// The options in use for server side encryption.
	SseSpecification *VerifiedAccessSseSpecificationResponse

	// The tags.
	Tags []Tag

	// The ARN of the Verified Access group.
	VerifiedAccessGroupArn *string

	// The ID of the Verified Access group.
	VerifiedAccessGroupId *string

	// The ID of the Amazon Web Services Verified Access instance.
	VerifiedAccessInstanceId *string

	noSmithyDocumentSerde
}

// Describes a Verified Access instance.
type VerifiedAccessInstance struct {

	// The creation time.
	CreationTime *string

	// A description for the Amazon Web Services Verified Access instance.
	Description *string

	// Indicates whether support for Federal Information Processing Standards (FIPS)
	// is enabled on the instance.
	FipsEnabled *bool

	// The last updated time.
	LastUpdatedTime *string

	// The tags.
	Tags []Tag

	// The ID of the Amazon Web Services Verified Access instance.
	VerifiedAccessInstanceId *string

	// The IDs of the Amazon Web Services Verified Access trust providers.
	VerifiedAccessTrustProviders []VerifiedAccessTrustProviderCondensed

	noSmithyDocumentSerde
}

// Describes logging options for an Amazon Web Services Verified Access instance.
type VerifiedAccessInstanceLoggingConfiguration struct {

	// Details about the logging options.
	AccessLogs *VerifiedAccessLogs

	// The ID of the Amazon Web Services Verified Access instance.
	VerifiedAccessInstanceId *string

	noSmithyDocumentSerde
}

// Options for CloudWatch Logs as a logging destination.
type VerifiedAccessLogCloudWatchLogsDestination struct {

	// The delivery status for access logs.
	DeliveryStatus *VerifiedAccessLogDeliveryStatus

	// Indicates whether logging is enabled.
	Enabled *bool

	// The ID of the CloudWatch Logs log group.
	LogGroup *string

	noSmithyDocumentSerde
}

// Options for CloudWatch Logs as a logging destination.
type VerifiedAccessLogCloudWatchLogsDestinationOptions struct {

	// Indicates whether logging is enabled.
	//
	// This member is required.
	Enabled *bool

	// The ID of the CloudWatch Logs log group.
	LogGroup *string

	noSmithyDocumentSerde
}

// Describes a log delivery status.
type VerifiedAccessLogDeliveryStatus struct {

	// The status code.
	Code VerifiedAccessLogDeliveryStatusCode

	// The status message.
	Message *string

	noSmithyDocumentSerde
}

// Options for Kinesis as a logging destination.
type VerifiedAccessLogKinesisDataFirehoseDestination struct {

	// The delivery status.
	DeliveryStatus *VerifiedAccessLogDeliveryStatus

	// The ID of the delivery stream.
	DeliveryStream *string

	// Indicates whether logging is enabled.
	Enabled *bool

	noSmithyDocumentSerde
}

// Describes Amazon Kinesis Data Firehose logging options.
type VerifiedAccessLogKinesisDataFirehoseDestinationOptions struct {

	// Indicates whether logging is enabled.
	//
	// This member is required.
	Enabled *bool

	// The ID of the delivery stream.
	DeliveryStream *string

	noSmithyDocumentSerde
}

// Options for Verified Access logs.
type VerifiedAccessLogOptions struct {

	// Sends Verified Access logs to CloudWatch Logs.
	CloudWatchLogs *VerifiedAccessLogCloudWatchLogsDestinationOptions

	// Indicates whether to include trust data sent by trust providers in the logs.
	IncludeTrustContext *bool

	// Sends Verified Access logs to Kinesis.
	KinesisDataFirehose *VerifiedAccessLogKinesisDataFirehoseDestinationOptions

	// The logging version. Valid values: ocsf-0.1 | ocsf-1.0.0-rc.2
	LogVersion *string

	// Sends Verified Access logs to Amazon S3.
	S3 *VerifiedAccessLogS3DestinationOptions

	noSmithyDocumentSerde
}

// Describes the options for Verified Access logs.
type VerifiedAccessLogs struct {

	// CloudWatch Logs logging destination.
	CloudWatchLogs *VerifiedAccessLogCloudWatchLogsDestination

	// Indicates whether trust data is included in the logs.
	IncludeTrustContext *bool

	// Kinesis logging destination.
	KinesisDataFirehose *VerifiedAccessLogKinesisDataFirehoseDestination

	// The log version.
	LogVersion *string

	// Amazon S3 logging options.
	S3 *VerifiedAccessLogS3Destination

	noSmithyDocumentSerde
}

// Options for Amazon S3 as a logging destination.
type VerifiedAccessLogS3Destination struct {

	// The bucket name.
	BucketName *string

	// The Amazon Web Services account number that owns the bucket.
	BucketOwner *string

	// The delivery status.
	DeliveryStatus *VerifiedAccessLogDeliveryStatus

	// Indicates whether logging is enabled.
	Enabled *bool

	// The bucket prefix.
	Prefix *string

	noSmithyDocumentSerde
}

// Options for Amazon S3 as a logging destination.
type VerifiedAccessLogS3DestinationOptions struct {

	// Indicates whether logging is enabled.
	//
	// This member is required.
	Enabled *bool

	// The bucket name.
	BucketName *string

	// The ID of the Amazon Web Services account that owns the Amazon S3 bucket.
	BucketOwner *string

	// The bucket prefix.
	Prefix *string

	noSmithyDocumentSerde
}

// Verified Access provides server side encryption by default to data at rest
// using Amazon Web Services-owned KMS keys. You also have the option of using
// customer managed KMS keys, which can be specified using the options below.
type VerifiedAccessSseSpecificationRequest struct {

	// Enable or disable the use of customer managed KMS keys for server side
	// encryption. Valid values: True | False
	CustomerManagedKeyEnabled *bool

	// The ARN of the KMS key.
	KmsKeyArn *string

	noSmithyDocumentSerde
}

// The options in use for server side encryption.
type VerifiedAccessSseSpecificationResponse struct {

	// Indicates whether customer managed KMS keys are in use for server side
	// encryption. Valid values: True | False
	CustomerManagedKeyEnabled *bool

	// The ARN of the KMS key.
	KmsKeyArn *string

	noSmithyDocumentSerde
}

// Describes a Verified Access trust provider.
type VerifiedAccessTrustProvider struct {

	// The creation time.
	CreationTime *string

	// A description for the Amazon Web Services Verified Access trust provider.
	Description *string

	// The options for device-identity trust provider.
	DeviceOptions *DeviceOptions

	// The type of device-based trust provider.
	DeviceTrustProviderType DeviceTrustProviderType

	// The last updated time.
	LastUpdatedTime *string

	// The options for an OpenID Connect-compatible user-identity trust provider.
	OidcOptions *OidcOptions

	// The identifier to be used when working with policy rules.
	PolicyReferenceName *string

	// The options in use for server side encryption.
	SseSpecification *VerifiedAccessSseSpecificationResponse

	// The tags.
	Tags []Tag

	// The type of Verified Access trust provider.
	TrustProviderType TrustProviderType

	// The type of user-based trust provider.
	UserTrustProviderType UserTrustProviderType

	// The ID of the Amazon Web Services Verified Access trust provider.
	VerifiedAccessTrustProviderId *string

	noSmithyDocumentSerde
}

// Condensed information about a trust provider.
type VerifiedAccessTrustProviderCondensed struct {

	// The description of trust provider.
	Description *string

	// The type of device-based trust provider.
	DeviceTrustProviderType DeviceTrustProviderType

	// The type of trust provider (user- or device-based).
	TrustProviderType TrustProviderType

	// The type of user-based trust provider.
	UserTrustProviderType UserTrustProviderType

	// The ID of the trust provider.
	VerifiedAccessTrustProviderId *string

	noSmithyDocumentSerde
}

// Describes telemetry for a VPN tunnel.
type VgwTelemetry struct {

	// The number of accepted routes.
	AcceptedRouteCount *int32

	// The Amazon Resource Name (ARN) of the VPN tunnel endpoint certificate.
	CertificateArn *string

	// The date and time of the last change in status. This field is updated when
	// changes in IKE (Phase 1), IPSec (Phase 2), or BGP status are detected.
	LastStatusChange *time.Time

	// The Internet-routable IP address of the virtual private gateway's outside
	// interface.
	OutsideIpAddress *string

	// The status of the VPN tunnel.
	Status TelemetryStatus

	// If an error occurs, a description of the error.
	StatusMessage *string

	noSmithyDocumentSerde
}

// Describes a volume.
type Volume struct {

	// Information about the volume attachments.
	Attachments []VolumeAttachment

	// The Availability Zone for the volume.
	AvailabilityZone *string

	// The time stamp when volume creation was initiated.
	CreateTime *time.Time

	// Indicates whether the volume is encrypted.
	Encrypted *bool

	// Indicates whether the volume was created using fast snapshot restore.
	FastRestored *bool

	// The number of I/O operations per second (IOPS). For gp3 , io1 , and io2
	// volumes, this represents the number of IOPS that are provisioned for the volume.
	// For gp2 volumes, this represents the baseline performance of the volume and the
	// rate at which the volume accumulates I/O credits for bursting.
	Iops *int32

	// The Amazon Resource Name (ARN) of the Key Management Service (KMS) KMS key that
	// was used to protect the volume encryption key for the volume.
	KmsKeyId *string

	// Indicates whether Amazon EBS Multi-Attach is enabled.
	MultiAttachEnabled *bool

	// The Amazon Resource Name (ARN) of the Outpost.
	OutpostArn *string

	// The size of the volume, in GiBs.
	Size *int32

	// The snapshot from which the volume was created, if applicable.
	SnapshotId *string

	// Reserved for future use.
	SseType SSEType

	// The volume state.
	State VolumeState

	// Any tags assigned to the volume.
	Tags []Tag

	// The throughput that the volume supports, in MiB/s.
	Throughput *int32

	// The ID of the volume.
	VolumeId *string

	// The volume type.
	VolumeType VolumeType

	noSmithyDocumentSerde
}

// Describes volume attachment details.
type VolumeAttachment struct {

	// The ARN of the Amazon ECS or Fargate task to which the volume is attached.
	AssociatedResource *string

	// The time stamp when the attachment initiated.
	AttachTime *time.Time

	// Indicates whether the EBS volume is deleted on instance termination.
	DeleteOnTermination *bool

	// The device name. If the volume is attached to a Fargate task, this parameter
	// returns null .
	Device *string

	// The ID of the instance. If the volume is attached to a Fargate task, this
	// parameter returns null .
	InstanceId *string

	// The service principal of Amazon Web Services service that owns the underlying
	// instance to which the volume is attached. This parameter is returned only for
	// volumes that are attached to Fargate tasks.
	InstanceOwningService *string

	// The attachment state of the volume.
	State VolumeAttachmentState

	// The ID of the volume.
	VolumeId *string

	noSmithyDocumentSerde
}

// Describes an EBS volume.
type VolumeDetail struct {

	// The size of the volume, in GiB.
	//
	// This member is required.
	Size *int64

	noSmithyDocumentSerde
}

// Describes the modification status of an EBS volume. If the volume has never
// been modified, some element values will be null.
type VolumeModification struct {

	// The modification completion or failure time.
	EndTime *time.Time

	// The current modification state. The modification state is null for unmodified
	// volumes.
	ModificationState VolumeModificationState

	// The original IOPS rate of the volume.
	OriginalIops *int32

	// The original setting for Amazon EBS Multi-Attach.
	OriginalMultiAttachEnabled *bool

	// The original size of the volume, in GiB.
	OriginalSize *int32

	// The original throughput of the volume, in MiB/s.
	OriginalThroughput *int32

	// The original EBS volume type of the volume.
	OriginalVolumeType VolumeType

	// The modification progress, from 0 to 100 percent complete.
	Progress *int64

	// The modification start time.
	StartTime *time.Time

	// A status message about the modification progress or failure.
	StatusMessage *string

	// The target IOPS rate of the volume.
	TargetIops *int32

	// The target setting for Amazon EBS Multi-Attach.
	TargetMultiAttachEnabled *bool

	// The target size of the volume, in GiB.
	TargetSize *int32

	// The target throughput of the volume, in MiB/s.
	TargetThroughput *int32

	// The target EBS volume type of the volume.
	TargetVolumeType VolumeType

	// The ID of the volume.
	VolumeId *string

	noSmithyDocumentSerde
}

// Describes a volume status operation code.
type VolumeStatusAction struct {

	// The code identifying the operation, for example, enable-volume-io .
	Code *string

	// A description of the operation.
	Description *string

	// The ID of the event associated with this operation.
	EventId *string

	// The event type associated with this operation.
	EventType *string

	noSmithyDocumentSerde
}

// Information about the instances to which the volume is attached.
type VolumeStatusAttachmentStatus struct {

	// The ID of the attached instance.
	InstanceId *string

	// The maximum IOPS supported by the attached instance.
	IoPerformance *string

	noSmithyDocumentSerde
}

// Describes a volume status.
type VolumeStatusDetails struct {

	// The name of the volume status.
	Name VolumeStatusName

	// The intended status of the volume status.
	Status *string

	noSmithyDocumentSerde
}

// Describes a volume status event.
type VolumeStatusEvent struct {

	// A description of the event.
	Description *string

	// The ID of this event.
	EventId *string

	// The type of this event.
	EventType *string

	// The ID of the instance associated with the event.
	InstanceId *string

	// The latest end time of the event.
	NotAfter *time.Time

	// The earliest start time of the event.
	NotBefore *time.Time

	noSmithyDocumentSerde
}

// Describes the status of a volume.
type VolumeStatusInfo struct {

	// The details of the volume status.
	Details []VolumeStatusDetails

	// The status of the volume.
	Status VolumeStatusInfoStatus

	noSmithyDocumentSerde
}

// Describes the volume status.
type VolumeStatusItem struct {

	// The details of the operation.
	Actions []VolumeStatusAction

	// Information about the instances to which the volume is attached.
	AttachmentStatuses []VolumeStatusAttachmentStatus

	// The Availability Zone of the volume.
	AvailabilityZone *string

	// A list of events associated with the volume.
	Events []VolumeStatusEvent

	// The Amazon Resource Name (ARN) of the Outpost.
	OutpostArn *string

	// The volume ID.
	VolumeId *string

	// The volume status.
	VolumeStatus *VolumeStatusInfo

	noSmithyDocumentSerde
}

// Describes a VPC.
type Vpc struct {

	// The primary IPv4 CIDR block for the VPC.
	CidrBlock *string

	// Information about the IPv4 CIDR blocks associated with the VPC.
	CidrBlockAssociationSet []VpcCidrBlockAssociation

	// The ID of the set of DHCP options you've associated with the VPC.
	DhcpOptionsId *string

	// The allowed tenancy of instances launched into the VPC.
	InstanceTenancy Tenancy

	// Information about the IPv6 CIDR blocks associated with the VPC.
	Ipv6CidrBlockAssociationSet []VpcIpv6CidrBlockAssociation

	// Indicates whether the VPC is the default VPC.
	IsDefault *bool

	// The ID of the Amazon Web Services account that owns the VPC.
	OwnerId *string

	// The current state of the VPC.
	State VpcState

	// Any tags assigned to the VPC.
	Tags []Tag

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes an attachment between a virtual private gateway and a VPC.
type VpcAttachment struct {

	// The current state of the attachment.
	State AttachmentStatus

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes an IPv4 CIDR block associated with a VPC.
type VpcCidrBlockAssociation struct {

	// The association ID for the IPv4 CIDR block.
	AssociationId *string

	// The IPv4 CIDR block.
	CidrBlock *string

	// Information about the state of the CIDR block.
	CidrBlockState *VpcCidrBlockState

	noSmithyDocumentSerde
}

// Describes the state of a CIDR block.
type VpcCidrBlockState struct {

	// The state of the CIDR block.
	State VpcCidrBlockStateCode

	// A message about the status of the CIDR block, if applicable.
	StatusMessage *string

	noSmithyDocumentSerde
}

// Deprecated. Describes whether a VPC is enabled for ClassicLink.
type VpcClassicLink struct {

	// Indicates whether the VPC is enabled for ClassicLink.
	ClassicLinkEnabled *bool

	// Any tags assigned to the VPC.
	Tags []Tag

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes a VPC endpoint.
type VpcEndpoint struct {

	// The date and time that the endpoint was created.
	CreationTimestamp *time.Time

	// (Interface endpoint) The DNS entries for the endpoint.
	DnsEntries []DnsEntry

	// The DNS options for the endpoint.
	DnsOptions *DnsOptions

	// (Interface endpoint) Information about the security groups that are associated
	// with the network interface.
	Groups []SecurityGroupIdentifier

	// The IP address type for the endpoint.
	IpAddressType IpAddressType

	// The last error that occurred for endpoint.
	LastError *LastError

	// (Interface endpoint) The network interfaces for the endpoint.
	NetworkInterfaceIds []string

	// The ID of the Amazon Web Services account that owns the endpoint.
	OwnerId *string

	// The policy document associated with the endpoint, if applicable.
	PolicyDocument *string

	// (Interface endpoint) Indicates whether the VPC is associated with a private
	// hosted zone.
	PrivateDnsEnabled *bool

	// Indicates whether the endpoint is being managed by its service.
	RequesterManaged *bool

	// (Gateway endpoint) The IDs of the route tables associated with the endpoint.
	RouteTableIds []string

	// The name of the service to which the endpoint is associated.
	ServiceName *string

	// The state of the endpoint.
	State State

	// (Interface endpoint) The subnets for the endpoint.
	SubnetIds []string

	// The tags assigned to the endpoint.
	Tags []Tag

	// The ID of the endpoint.
	VpcEndpointId *string

	// The type of endpoint.
	VpcEndpointType VpcEndpointType

	// The ID of the VPC to which the endpoint is associated.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes a VPC endpoint connection to a service.
type VpcEndpointConnection struct {

	// The date and time that the VPC endpoint was created.
	CreationTimestamp *time.Time

	// The DNS entries for the VPC endpoint.
	DnsEntries []DnsEntry

	// The Amazon Resource Names (ARNs) of the Gateway Load Balancers for the service.
	GatewayLoadBalancerArns []string

	// The IP address type for the endpoint.
	IpAddressType IpAddressType

	// The Amazon Resource Names (ARNs) of the network load balancers for the service.
	NetworkLoadBalancerArns []string

	// The ID of the service to which the endpoint is connected.
	ServiceId *string

	// The tags.
	Tags []Tag

	// The ID of the VPC endpoint connection.
	VpcEndpointConnectionId *string

	// The ID of the VPC endpoint.
	VpcEndpointId *string

	// The ID of the Amazon Web Services account that owns the VPC endpoint.
	VpcEndpointOwner *string

	// The state of the VPC endpoint.
	VpcEndpointState State

	noSmithyDocumentSerde
}

// Describes an IPv6 CIDR block associated with a VPC.
type VpcIpv6CidrBlockAssociation struct {

	// The association ID for the IPv6 CIDR block.
	AssociationId *string

	// The IPv6 CIDR block.
	Ipv6CidrBlock *string

	// Information about the state of the CIDR block.
	Ipv6CidrBlockState *VpcCidrBlockState

	// The ID of the IPv6 address pool from which the IPv6 CIDR block is allocated.
	Ipv6Pool *string

	// The name of the unique set of Availability Zones, Local Zones, or Wavelength
	// Zones from which Amazon Web Services advertises IP addresses, for example,
	// us-east-1-wl1-bos-wlz-1 .
	NetworkBorderGroup *string

	noSmithyDocumentSerde
}

// Describes a VPC peering connection.
type VpcPeeringConnection struct {

	// Information about the accepter VPC. CIDR block information is only returned
	// when describing an active VPC peering connection.
	AccepterVpcInfo *VpcPeeringConnectionVpcInfo

	// The time that an unaccepted VPC peering connection will expire.
	ExpirationTime *time.Time

	// Information about the requester VPC. CIDR block information is only returned
	// when describing an active VPC peering connection.
	RequesterVpcInfo *VpcPeeringConnectionVpcInfo

	// The status of the VPC peering connection.
	Status *VpcPeeringConnectionStateReason

	// Any tags assigned to the resource.
	Tags []Tag

	// The ID of the VPC peering connection.
	VpcPeeringConnectionId *string

	noSmithyDocumentSerde
}

// Describes the VPC peering connection options.
type VpcPeeringConnectionOptionsDescription struct {

	// Indicates whether a local VPC can resolve public DNS hostnames to private IP
	// addresses when queried from instances in a peer VPC.
	AllowDnsResolutionFromRemoteVpc *bool

	// Deprecated.
	AllowEgressFromLocalClassicLinkToRemoteVpc *bool

	// Deprecated.
	AllowEgressFromLocalVpcToRemoteClassicLink *bool

	noSmithyDocumentSerde
}

// Describes the status of a VPC peering connection.
type VpcPeeringConnectionStateReason struct {

	// The status of the VPC peering connection.
	Code VpcPeeringConnectionStateReasonCode

	// A message that provides more information about the status, if applicable.
	Message *string

	noSmithyDocumentSerde
}

// Describes a VPC in a VPC peering connection.
type VpcPeeringConnectionVpcInfo struct {

	// The IPv4 CIDR block for the VPC.
	CidrBlock *string

	// Information about the IPv4 CIDR blocks for the VPC.
	CidrBlockSet []CidrBlock

	// The IPv6 CIDR block for the VPC.
	Ipv6CidrBlockSet []Ipv6CidrBlock

	// The ID of the Amazon Web Services account that owns the VPC.
	OwnerId *string

	// Information about the VPC peering connection options for the accepter or
	// requester VPC.
	PeeringOptions *VpcPeeringConnectionOptionsDescription

	// The Region in which the VPC is located.
	Region *string

	// The ID of the VPC.
	VpcId *string

	noSmithyDocumentSerde
}

// Describes a VPN connection.
type VpnConnection struct {

	// The category of the VPN connection. A value of VPN indicates an Amazon Web
	// Services VPN connection. A value of VPN-Classic indicates an Amazon Web
	// Services Classic VPN connection.
	Category *string

	// The ARN of the core network.
	CoreNetworkArn *string

	// The ARN of the core network attachment.
	CoreNetworkAttachmentArn *string

	// The configuration information for the VPN connection's customer gateway (in the
	// native XML format). This element is always present in the CreateVpnConnection
	// response; however, it's present in the DescribeVpnConnections response only if
	// the VPN connection is in the pending or available state.
	CustomerGatewayConfiguration *string

	// The ID of the customer gateway at your end of the VPN connection.
	CustomerGatewayId *string

	// The current state of the gateway association.
	GatewayAssociationState GatewayAssociationState

	// The VPN connection options.
	Options *VpnConnectionOptions

	// The static routes associated with the VPN connection.
	Routes []VpnStaticRoute

	// The current state of the VPN connection.
	State VpnState

	// Any tags assigned to the VPN connection.
	Tags []Tag

	// The ID of the transit gateway associated with the VPN connection.
	TransitGatewayId *string

	// The type of VPN connection.
	Type GatewayType

	// Information about the VPN tunnel.
	VgwTelemetry []VgwTelemetry

	// The ID of the VPN connection.
	VpnConnectionId *string

	// The ID of the virtual private gateway at the Amazon Web Services side of the
	// VPN connection.
	VpnGatewayId *string

	noSmithyDocumentSerde
}

// List of customer gateway devices that have a sample configuration file
// available for use. You can also see the list of device types with sample
// configuration files available under Your customer gateway device (https://docs.aws.amazon.com/vpn/latest/s2svpn/your-cgw.html)
// in the Amazon Web Services Site-to-Site VPN User Guide.
type VpnConnectionDeviceType struct {

	// Customer gateway device platform.
	Platform *string

	// Customer gateway device software version.
	Software *string

	// Customer gateway device vendor.
	Vendor *string

	// Customer gateway device identifier.
	VpnConnectionDeviceTypeId *string

	noSmithyDocumentSerde
}

// Describes VPN connection options.
type VpnConnectionOptions struct {

	// Indicates whether acceleration is enabled for the VPN connection.
	EnableAcceleration *bool

	// The IPv4 CIDR on the customer gateway (on-premises) side of the VPN connection.
	LocalIpv4NetworkCidr *string

	// The IPv6 CIDR on the customer gateway (on-premises) side of the VPN connection.
	LocalIpv6NetworkCidr *string

	// The type of IPv4 address assigned to the outside interface of the customer
	// gateway. Valid values: PrivateIpv4 | PublicIpv4 Default: PublicIpv4
	OutsideIpAddressType *string

	// The IPv4 CIDR on the Amazon Web Services side of the VPN connection.
	RemoteIpv4NetworkCidr *string

	// The IPv6 CIDR on the Amazon Web Services side of the VPN connection.
	RemoteIpv6NetworkCidr *string

	// Indicates whether the VPN connection uses static routes only. Static routes
	// must be used for devices that don't support BGP.
	StaticRoutesOnly *bool

	// The transit gateway attachment ID in use for the VPN tunnel.
	TransportTransitGatewayAttachmentId *string

	// Indicates whether the VPN tunnels process IPv4 or IPv6 traffic.
	TunnelInsideIpVersion TunnelInsideIpVersion

	// Indicates the VPN tunnel options.
	TunnelOptions []TunnelOption

	noSmithyDocumentSerde
}

// Describes VPN connection options.
type VpnConnectionOptionsSpecification struct {

	// Indicate whether to enable acceleration for the VPN connection. Default: false
	EnableAcceleration *bool

	// The IPv4 CIDR on the customer gateway (on-premises) side of the VPN connection.
	// Default: 0.0.0.0/0
	LocalIpv4NetworkCidr *string

	// The IPv6 CIDR on the customer gateway (on-premises) side of the VPN connection.
	// Default: ::/0
	LocalIpv6NetworkCidr *string

	// The type of IPv4 address assigned to the outside interface of the customer
	// gateway device. Valid values: PrivateIpv4 | PublicIpv4 Default: PublicIpv4
	OutsideIpAddressType *string

	// The IPv4 CIDR on the Amazon Web Services side of the VPN connection. Default:
	// 0.0.0.0/0
	RemoteIpv4NetworkCidr *string

	// The IPv6 CIDR on the Amazon Web Services side of the VPN connection. Default:
	// ::/0
	RemoteIpv6NetworkCidr *string

	// Indicate whether the VPN connection uses static routes only. If you are
	// creating a VPN connection for a device that does not support BGP, you must
	// specify true . Use CreateVpnConnectionRoute to create a static route. Default:
	// false
	StaticRoutesOnly *bool

	// The transit gateway attachment ID to use for the VPN tunnel. Required if
	// OutsideIpAddressType is set to PrivateIpv4 .
	TransportTransitGatewayAttachmentId *string

	// Indicate whether the VPN tunnels process IPv4 or IPv6 traffic. Default: ipv4
	TunnelInsideIpVersion TunnelInsideIpVersion

	// The tunnel options for the VPN connection.
	TunnelOptions []VpnTunnelOptionsSpecification

	noSmithyDocumentSerde
}

// Describes a virtual private gateway.
type VpnGateway struct {

	// The private Autonomous System Number (ASN) for the Amazon side of a BGP session.
	AmazonSideAsn *int64

	// The Availability Zone where the virtual private gateway was created, if
	// applicable. This field may be empty or not returned.
	AvailabilityZone *string

	// The current state of the virtual private gateway.
	State VpnState

	// Any tags assigned to the virtual private gateway.
	Tags []Tag

	// The type of VPN connection the virtual private gateway supports.
	Type GatewayType

	// Any VPCs attached to the virtual private gateway.
	VpcAttachments []VpcAttachment

	// The ID of the virtual private gateway.
	VpnGatewayId *string

	noSmithyDocumentSerde
}

// Describes a static route for a VPN connection.
type VpnStaticRoute struct {

	// The CIDR block associated with the local subnet of the customer data center.
	DestinationCidrBlock *string

	// Indicates how the routes were provided.
	Source VpnStaticRouteSource

	// The current state of the static route.
	State VpnState

	noSmithyDocumentSerde
}

// Options for logging VPN tunnel activity.
type VpnTunnelLogOptions struct {

	// Options for sending VPN tunnel logs to CloudWatch.
	CloudWatchLogOptions *CloudWatchLogOptions

	noSmithyDocumentSerde
}

// Options for logging VPN tunnel activity.
type VpnTunnelLogOptionsSpecification struct {

	// Options for sending VPN tunnel logs to CloudWatch.
	CloudWatchLogOptions *CloudWatchLogOptionsSpecification

	noSmithyDocumentSerde
}

// The tunnel options for a single VPN tunnel.
type VpnTunnelOptionsSpecification struct {

	// The action to take after DPD timeout occurs. Specify restart to restart the IKE
	// initiation. Specify clear to end the IKE session. Valid Values: clear | none |
	// restart Default: clear
	DPDTimeoutAction *string

	// The number of seconds after which a DPD timeout occurs. Constraints: A value
	// greater than or equal to 30. Default: 30
	DPDTimeoutSeconds *int32

	// Turn on or off tunnel endpoint lifecycle control feature.
	EnableTunnelLifecycleControl *bool

	// The IKE versions that are permitted for the VPN tunnel. Valid values: ikev1 |
	// ikev2
	IKEVersions []IKEVersionsRequestListValue

	// Options for logging VPN tunnel activity.
	LogOptions *VpnTunnelLogOptionsSpecification

	// One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel
	// for phase 1 IKE negotiations. Valid values: 2 | 14 | 15 | 16 | 17 | 18 | 19 | 20
	// | 21 | 22 | 23 | 24
	Phase1DHGroupNumbers []Phase1DHGroupNumbersRequestListValue

	// One or more encryption algorithms that are permitted for the VPN tunnel for
	// phase 1 IKE negotiations. Valid values: AES128 | AES256 | AES128-GCM-16 |
	// AES256-GCM-16
	Phase1EncryptionAlgorithms []Phase1EncryptionAlgorithmsRequestListValue

	// One or more integrity algorithms that are permitted for the VPN tunnel for
	// phase 1 IKE negotiations. Valid values: SHA1 | SHA2-256 | SHA2-384 | SHA2-512
	Phase1IntegrityAlgorithms []Phase1IntegrityAlgorithmsRequestListValue

	// The lifetime for phase 1 of the IKE negotiation, in seconds. Constraints: A
	// value between 900 and 28,800. Default: 28800
	Phase1LifetimeSeconds *int32

	// One or more Diffie-Hellman group numbers that are permitted for the VPN tunnel
	// for phase 2 IKE negotiations. Valid values: 2 | 5 | 14 | 15 | 16 | 17 | 18 | 19
	// | 20 | 21 | 22 | 23 | 24
	Phase2DHGroupNumbers []Phase2DHGroupNumbersRequestListValue

	// One or more encryption algorithms that are permitted for the VPN tunnel for
	// phase 2 IKE negotiations. Valid values: AES128 | AES256 | AES128-GCM-16 |
	// AES256-GCM-16
	Phase2EncryptionAlgorithms []Phase2EncryptionAlgorithmsRequestListValue

	// One or more integrity algorithms that are permitted for the VPN tunnel for
	// phase 2 IKE negotiations. Valid values: SHA1 | SHA2-256 | SHA2-384 | SHA2-512
	Phase2IntegrityAlgorithms []Phase2IntegrityAlgorithmsRequestListValue

	// The lifetime for phase 2 of the IKE negotiation, in seconds. Constraints: A
	// value between 900 and 3,600. The value must be less than the value for
	// Phase1LifetimeSeconds . Default: 3600
	Phase2LifetimeSeconds *int32

	// The pre-shared key (PSK) to establish initial authentication between the
	// virtual private gateway and customer gateway. Constraints: Allowed characters
	// are alphanumeric characters, periods (.), and underscores (_). Must be between 8
	// and 64 characters in length and cannot start with zero (0).
	PreSharedKey *string

	// The percentage of the rekey window (determined by RekeyMarginTimeSeconds )
	// during which the rekey time is randomly selected. Constraints: A value between 0
	// and 100. Default: 100
	RekeyFuzzPercentage *int32

	// The margin time, in seconds, before the phase 2 lifetime expires, during which
	// the Amazon Web Services side of the VPN connection performs an IKE rekey. The
	// exact time of the rekey is randomly selected based on the value for
	// RekeyFuzzPercentage . Constraints: A value between 60 and half of
	// Phase2LifetimeSeconds . Default: 270
	RekeyMarginTimeSeconds *int32

	// The number of packets in an IKE replay window. Constraints: A value between 64
	// and 2048. Default: 1024
	ReplayWindowSize *int32

	// The action to take when the establishing the tunnel for the VPN connection. By
	// default, your customer gateway device must initiate the IKE negotiation and
	// bring up the tunnel. Specify start for Amazon Web Services to initiate the IKE
	// negotiation. Valid Values: add | start Default: add
	StartupAction *string

	// The range of inside IPv4 addresses for the tunnel. Any specified CIDR blocks
	// must be unique across all VPN connections that use the same virtual private
	// gateway. Constraints: A size /30 CIDR block from the 169.254.0.0/16 range. The
	// following CIDR blocks are reserved and cannot be used:
	//   - 169.254.0.0/30
	//   - 169.254.1.0/30
	//   - 169.254.2.0/30
	//   - 169.254.3.0/30
	//   - 169.254.4.0/30
	//   - 169.254.5.0/30
	//   - 169.254.169.252/30
	TunnelInsideCidr *string

	// The range of inside IPv6 addresses for the tunnel. Any specified CIDR blocks
	// must be unique across all VPN connections that use the same transit gateway.
	// Constraints: A size /126 CIDR block from the local fd00::/8 range.
	TunnelInsideIpv6Cidr *string

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde
